虽然使用for循环很容易实现,但在Java 8中是否有一种方式可以查找列表L
中的所有元素是否都存在于集合s
中?
虽然使用for循环很容易实现,但在Java 8中是否有一种方式可以查找列表L
中的所有元素是否都存在于集合s
中?
使用 Set#containsAll
就可以了,不需要使用 Stream
:
var set = Set.of(1, 2, 3, 4, 5);
var list = List.of(2, 3, 4);
System.out.println(set.containsAll(list));
输出:
true
Set#containsAll
方法并不意味着没有必要使用流(Stream)... - Ousmane D.set.containsAll(list)
比l.stream().allMatch(s::contains)
更简洁,语法也更简单,并且在过去的二十年中一直可靠。那么,既然在这里使用流没有性能优势,改变的原因是什么呢? - Holgerl.stream().filter(...).map(...)..
,因为你可以使用for
循环来做同样的事情。 - Ousmane D.allMatch
:boolean result = l.stream().allMatch(s::contains);
是的。
long commonElements = l.stream().filter(s::contains).count();
if (commonElements == l.size()) {
//do something
}
集合非常好,因为它们专门用于检查项目是否已存在。列表在这方面不如集合,但对于快速遍历很有用。因此,您需要循环遍历列表并将每个元素与集合进行比较,而不是反过来。
流是执行操作的好资源,而不是明确地打破事物。
编辑:@Aomine的答案比我的更好。
boolean result = myList.stream().allMatch(mySet::contains);