5

我想通过将所有集合放在一个列表中来做到这一点,然后该列表将放在一个地图中,其中关键是大小。我知道一个集合的最大大小(给我),所以我可以在 0 和那个数字之间迭代,获取每个列表,然后遍历每个列表并将每个集合放入一个数组列表中。

然而,这看起来非常笨拙——有没有更好的方法呢?有什么方法可以根据大小进行比较器功能吗?

谢谢

4

2 回答 2

8

您可以为此提供一个比较器。并使用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());
    }
});

当然,如果您打算多次使用这样的比较器,那么我会考虑明确定义它。


相关的javadocs:

于 2012-10-23T21:34:18.167 回答