多组交集(作为集合)

时间:2015-07-22 17:49:46

标签: java intersection

如何在Java中找到多个(两个以上)集合的交集?

retainAll本身不会起作用,因为我需要能够获得不止两组之间的交集

2 个答案:

答案 0 :(得分:1)

public static <T> Collection<T> getIntersection(Collection<T>... sets) {

    Collection<T> firstSet;

    if (sets == null || sets.length == 0 || (firstSet = sets[0]) == null)
        return Collections.<T>emptySet();

    Collection<T> intersection = new HashSet(firstSet);

    for (Collection c : sets) {
        if (c == null) 
            return Collections.<T>emptySet();
        intersection.retainAll(c);
    }
    return intersection;
}

答案 1 :(得分:1)

您可以使用Set retainAll(other)方法,该方法仅保留两个集合中的项目。它会改变原始集合,因此您可能需要先获取集合的副本(使用适当的构造函数)。