我想通过将所有集合放在一个列表中然后放在一个映射中来实现这一点,其中键是大小。我知道一个集合的最大大小(给我),所以我可以在0和那个数字之间迭代,得到每个列表然后遍历每个列表并将每个集合放在一个arraylist中。
然而,这看起来很可怕 - 有没有更好的方法呢?有什么办法可以根据尺寸做比较器功能吗?
由于
答案 0 :(得分: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]]
答案 1 :(得分:2)
除了其他(完全有效)的答案之外,我只想指出你不需要明确定义一个新类,你可以匿名创建一个:
Collections.sort(myList, new Comparator<Set<?>>() {
@Override
public int compare(Set<?> o1, Set<?> o2) {
return Integer.valueOf(o1.size()).compareTo(o2.size());
}
});
当然,如果您计划多次使用这样的比较器,那么我会考虑明确地定义它。
相关的javadocs: