Answers:
anyMatch
将流式传输所有元素setA
并调用setB.contains()
它们。如果对任何元素返回“ true”,则整个表达式的计算结果将为true。希望这会有所帮助。
实现GuetsAny的好方法是使用Guava Sets.intersection()。
containsAny
会返回boolean
,因此调用如下所示:
Sets.intersection(set1, set2).isEmpty()
如果集合不相交,则返回true,否则返回false。此方法的时间复杂度可能比keepAll好一点,因为您不必进行任何克隆操作即可避免修改原始集。
Apache Commons有一个方法CollectionUtils.containsAny()
。
使用retainAll()
在设置界面。此方法提供了两个集合中共有的元素的交集。有关更多信息,请参见API文档。
retainAll
可能无济于事。它的实现AbstractCollection
反复进行。
O(1)
在最佳情况下将具有运行时间,而retainAll
在类似情况下将具有某种运行时间O(N)
(这仅取决于1个集合的大小)最佳情况下的运行时间。
有一些粗糙的方法可以做到这一点。当且仅当A集包含比呼叫多的B元素
A.removeAll(B)
将修改A集。在这种情况下,removeAll将返回true(如removeAll docs所述)。但是,您可能不想修改A集,因此您可能会考虑对副本执行以下操作:
new HashSet(A).removeAll(B)
如果集合没有区别,即它们具有非空交集,则返回值将为true。