0

のオブジェクトがArrayListあり、2つの属性を使用して(コンパレータを使用して)ソートする必要があります。並べ替えに使用した属性に応じて、並べ替えた出力を別の名前のテキストファイルに保存する必要があります。たとえば、リストを並べ替えると、ファイルは。にattribute1なりattribute1.txtattribute2ファイルは。になります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 に答える