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

Java 多个集合的交集(作为集合),java,intersection,Java,Intersection,如何在Java中找到多个(两个以上)集合的交集 retainAll本身不起作用,因为我需要能够获得两个以上集合之间的交集public static Collection getcrossition(集合…集合){ public static <T> Collection<T> getIntersection(Collection<T>... sets) { Collection<T> firstSet; if (sets ==

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

retainAll
本身不起作用,因为我需要能够获得两个以上集合之间的交集

public static Collection getcrossition(集合…集合){
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;
}
收集第一套; if(set==null | | set.length==0 | |(firstSet=set[0])==null) 返回集合; 集合交集=新哈希集(第一集); 用于(集合c:集合){ 如果(c==null) 返回集合; 交叉口。保留(c); } 折返交叉口; }
您可以使用集合的
保留所有(其他)
方法,该方法仅保留两个集合中的项目。它改变了原始集合,因此您可能需要先复制集合(使用适当的构造函数)。

您可以向我们展示任何代码吗?@SamM oh,我将此作为答案发布。我没有意识到我必须等两天才能接受我的答案。这是我第一次勾选“回答你自己的问题”框。这个问题看起来你在问之前没有做任何研究,这通常是一个投反对票的诱饵,但既然你自己回答了,这是错误的,可能重复这个可能会起作用,但它是在重新发明轮子。有一个内置的方法
retainAll()
可以做同样的工作。谢谢@aetheria,我改变了答案以实现retainAll2其他提示:如果使用varargs,我不认为它(
set
)可以
null
。您应该检查
sets.length!=0
并且可能对
集合的元素执行
null
检查。另外,当您承诺返回
集合时,最好不要返回
null
!返回
Collections.emptyList()
Collections.emptySet()
,或抛出
异常
,如果您认为
null
值是游戏的破坏者。@bali182酷,谢谢!我编辑了每一年的建议。另外,它似乎可以使用
null
集合
inputGetIntersection()简单地返回传递给它的内容吗?当我使用它时,它就是这样做的。假设您在传递的集合中的第一个集合是(11,12),其他集合是(1,3,4,5),等等,并且不包含第一个集合中包含的任何元素,那么使用retainal()不会导致空结果集吗?正如javaDoc for retainall()所述,“…从该集合中删除指定集合中不包含的所有元素…”因此,如果前两个集合不匹配,则retainall()的所有后续使用将导致一个空集合。