0

我有一个ArrayList对象,我需要使用两个属性(使用比较器)对其进行排序。我需要将排序后的输出保存到具有不同名称的文本文件中,具体取决于用于排序的属性。例如,如果列表按排序,attribute1则文件为attribute1.txt,如果attribute2文件为attribute2.txt.

我希望它如何工作(伪代码):

if(sortedByAtr1){
    FileWriter fwstream = new FileWriter(sortedByAtribute1.getName()+".txt");   
}
else(sortedByAtr2){
    FileWriter fwstream = new FileWriter(sortedByAtribute2.getName()+".txt");
}

这可能吗?我很感激任何建议。谢谢。

伺服

4

1 回答 1

1

这是解决此要求的面向对象的方法。

对 List 及其排序属性使用包装器:

public class ListSorter<V> {

    private final List<V> values;
    private String sortingAttribute;

    public ListSorter(List<V> values) {
        this.values = values;
    }

    public void sort(AttributeComparator<V> comparator) {
        Collections.sort(values, comparator);
        sortingAttribute = comparator.getSortingAttribute();
    }

    public String getSortingAttribute() {
        return sortingAttribute;
    }
}

扩展 Comparator 接口,以便您可以获取属性名称:

public interface AttributeComparator<T> extends Comparator<T> {
    public String getSortingAttribute();
}

像这样创建自定义 AttributeComparators:

public class FooBarComparator implements AttributeComparator<Foo> {

    public int compare(Foo foo1, Foo foo2) {
        // skipped nullchecks for brevity
        return foo1.getBar().compare(foo2.getBar());
    }

    public String getSortingAttribute() {
        return "bar";
    }

}

采用:

List<Foo> yourList = new ArrayList<Foo>();
ListSorter<Foo> example = new ListSorter<Foo>(yourList);
AttributeComparator comparator1 = new FooBarComparator();
example.sort(comparator1);
FileWriter fwstream = new FileWriter(example.getSortingAttribute() +".txt"); 
于 2012-11-27T20:44:00.573 回答