多个集合的交集(作为集合)

Intersection of multiple sets (as collections)

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

retainAll 本身是行不通的,因为我需要能够获得不止两个集合之间的交集

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;
}

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