我有两套同类型的A和B。

我必须找出A是否包含集合B中的任何元素。

不遍历集合的最好方法是什么? Set库有contains(object)和containsAll(collection),但没有containsAny(collection)。


当前回答

Apache Commons有一个CollectionUtils.containsAny()方法。

其他回答

在Set接口中使用retainAll()。此方法提供了两个集合中公共元素的交集。有关更多信息,请参阅API文档。

流:anyMatch

从Java 8开始,你可以使用Stream::anyMatch。

setA.stream().anyMatch(setB::contains)

有一个粗略的方法。 当且仅当A集合包含某个B的元素时调用

A.removeAll(B)

将修改A集。在这种情况下,removeAll将返回true(如removeAll docs中所述)。但可能你不想修改A集,所以你可能会考虑对副本进行操作,像这样:

new HashSet(A).removeAll(B)

如果集合不不同,也就是说它们有非空交集,返回值为真。

参见Apache Commons Collections

Apache Commons有一个CollectionUtils.containsAny()方法。

我使用org.apache.commons.collections.CollectionUtils

CollectionUtils.containsAny(someCollection1, someCollection2)

就是这样! 如果两个集合中至少有一个元素,则返回true。

使用简单,函数名更具启发性。