如果函数被调用,是否可以检查?

时间:2012-11-27 19:00:09

标签: java file outputstream

我有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");
}

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

伺服

1 个答案:

答案 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");