5

これを行うには、すべてのセットをリストに入れ、それをマップに入れることを考えました。キーはサイズです。セットが可能な最大サイズを知っているので(私に与えられた)、0とその数の間を反復し、各リストを取得してから、各リストを反復し、各セットを配列リストに入れることができます。

しかし、これは恐ろしく不格好に思えます - これを行うより良い方法はありますか? サイズに基づいてコンパレータ機能を実行する方法はありますか?

ありがとう

4

2 に答える 2

8

そのためのComparatorを提供できます。と使用Collections.sort()

class SizeComarator implements Comparator<Set<?>> {

    @Override
    public int compare(Set<?> o1, Set<?> o2) {
        return Integer.valueOf(o1.size()).compareTo(o2.size());
    }
}

    ArrayList<Set<String>> arrayList = new ArrayList<Set<String>>();
    Set<String> set1 = new HashSet<String>();
    set1.add("A");
    set1.add("B");
    Set<String> set2 = new HashSet<String>();
    set2.add("A");
    arrayList.add(set1);
    arrayList.add(set2);
    Collections.sort(arrayList, new SizeComarator());
    System.out.println(arrayList);

出力:

 [[A], [A, B]]
于 2012-10-23T21:28:15.723 に答える
3

他の(完全に有効な)回答に加えて、新しいクラスを明示的に定義する必要はなく、匿名で作成できることを指摘します。

Collections.sort(myList, new Comparator<Set<?>>() {
    @Override
    public int compare(Set<?> o1, Set<?> o2) {
        return Integer.valueOf(o1.size()).compareTo(o2.size());
    }
});

もちろん、そのようなコンパレータを複数回使用する予定がある場合は、明示的に定義することを検討します。


関連する javadoc:

于 2012-10-23T21:34:18.167 に答える