所以我有两个集合:A 和 B。我需要检查集合 B 是否包含集合 A 中不存在的任何内容。可能存在交集,所以我不能只检查集合 A 是否包含集合 B。 我显然可以这样做:
for (String string : setA) {
if (!setB.contains(string) {
break;
}
}
或者使用 Guava 库:
Sets.intersection(setA, setB).containsAll(setB); // returns false if there are elements outside.
但是有没有什么方法可以表现得更好或者更干净或更优雅呢? 谢谢。
最佳答案
“B
包含一个不在A
中的元素”与“A
完全相反包含 B
”的所有元素”,因此,现有的方法containsAll
足以回答这个问题。
if(!setA.containsAll(setB)) {
System.out.println("setB contains an element not in setA");
}
您可以使用 setB.size()>setA.size() || 快捷方式!setA.containsAll(setB)
,但这需要集契约(Contract)意相等的定义,例如如果一个集合是使用 String.CASE_INSENSITIVE_ORDER
作为比较器的 SortedSet
而另一个是 HashSet
,这将不起作用(但是无论如何,这种组合的正确结果是棘手的)。
如果 setB
非常大,您可能会从使用像这样的并行流中获益
if(!setB.parallelStream().allMatch(setA::contains)) {
System.out.println("setB contains an element not in setA");
}
但这种情况很少见。
关于java - 如何检查集合 B 是否至少有一个不在集合 A 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45966860/