You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,因为HashSetcontains()是O(1)的,能大幅提升整体检查效率:

// 先将集合s转为HashSet
Set<T> efficientSet = new HashSet<>(s);
boolean allElementsPresent = L.stream().allMatch(efficientSet::contains);

这样不管列表L有多长,检查的整体性能都会好很多哦~

内容的提问来源于stack exchange,提问作者Tanvi Jaywant

火山引擎 最新活动