Java 8如何判断列表所有元素是否都存在于集合中?
Java 8 判断列表所有元素是否存在于集合中的方法
当然有更优雅的方式啦!Java 8的Stream API完全可以替代繁琐的for循环,轻松实现这个需求,最直接的就是用Stream.allMatch()方法。
核心实现方式
allMatch()方法会验证流中的所有元素是否都满足指定的条件,正好契合我们的需求——检查列表L里的每个元素都存在于集合s中。代码示例如下:
// 假设L是List<T>类型,s是Collection<T>类型 boolean allElementsPresent = L.stream().allMatch(s::contains);
简单解释下:
- 调用
L.stream()把列表转换成Stream流 allMatch(s::contains)相当于对每个元素执行s.contains(element),只要有一个元素不满足(即不在s中),方法就会短路返回false;只有所有元素都满足时才返回true
性能优化小技巧
如果你的集合s是查询效率较低的类型(比如ArrayList,它的contains()是O(n)时间复杂度),建议先把它转成HashSet,因为HashSet的contains()是O(1)的,能大幅提升整体检查效率:
// 先将集合s转为HashSet Set<T> efficientSet = new HashSet<>(s); boolean allElementsPresent = L.stream().allMatch(efficientSet::contains);
这样不管列表L有多长,检查的整体性能都会好很多哦~
内容的提问来源于stack exchange,提问作者Tanvi Jaywant




