これを行うには、すべてのセットをリストに入れ、それをマップに入れることを考えました。キーはサイズです。セットが可能な最大サイズを知っているので(私に与えられた)、0とその数の間を反復し、各リストを取得してから、各リストを反復し、各セットを配列リストに入れることができます。
しかし、これは恐ろしく不格好に思えます - これを行うより良い方法はありますか? サイズに基づいてコンパレータ機能を実行する方法はありますか?
ありがとう
そのための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]]
他の(完全に有効な)回答に加えて、新しいクラスを明示的に定義する必要はなく、匿名で作成できることを指摘します。
Collections.sort(myList, new Comparator<Set<?>>() {
@Override
public int compare(Set<?> o1, Set<?> o2) {
return Integer.valueOf(o1.size()).compareTo(o2.size());
}
});
もちろん、そのようなコンパレータを複数回使用する予定がある場合は、明示的に定義することを検討します。
関連する javadoc: