我有ArrayList
个对象,我需要使用两个属性进行排序(使用Comparators)。我需要将排序的输出保存到具有不同名称的文本文件,具体取决于用于排序的属性。例如,如果列表按attribute1
排序,则文件将为attribute1.txt
,如果attribute2
文件为attribute2.txt
。
我希望它如何工作(伪代码):
if(sortedByAtr1){
FileWriter fwstream = new FileWriter(sortedByAtribute1.getName()+".txt");
}
else(sortedByAtr2){
FileWriter fwstream = new FileWriter(sortedByAtribute2.getName()+".txt");
}
这可能吗? 我很感激任何建议。 谢谢。
伺服
答案 0 :(得分: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");