Java8-求两个集合取交集

在Java8中,求两个集合的交集可以使用不同的三种方式:传统的循环遍历、使用Stream API的filter操作和使用Stream API的Collection操作。

方法一:传统的循环遍历 首先,我们创建两个集合list1和list2,并给它们添加一些元素:

java 复制代码
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);

List<Integer> list2 = new ArrayList<>();
list2.add(2);
list2.add(3);
list2.add(4);

然后,我们使用传统的循环遍历的方式来求两个集合的交集:

java 复制代码
List<Integer> intersection = new ArrayList<>();
for (Integer num : list1) {
    if (list2.contains(num)) {
        intersection.add(num);
    }
}

System.out.println("交集为:" + intersection);

这种方式的思路很简单,就是遍历第一个集合list1的每个元素,然后判断该元素是否包含在第二个集合list2中,如果包含,则将该元素添加到交集intersection中。

方法二:使用Stream API的filter操作 Java8引入了Stream API,使得操作集合变得更加简洁和高效。使用Stream API的filter操作可以筛选满足条件的元素,并返回一个新的Stream。我们可以将两个集合转换为Stream,然后使用filter操作来求交集:

java 复制代码
List<Integer> intersection = list1.stream()
        .filter(list2::contains)
        .collect(Collectors.toList());

System.out.println("交集为:" + intersection);

这种方式的思路是将集合list1转换为一个Stream,然后使用filter操作筛选出满足条件的元素,条件是元素存在于集合list2中,最后将filter操作得到的Stream转换为List。

方法三:使用Stream API的Collection操作 除了filter操作,Stream API还提供了许多其他的操作,例如:map、reduce、distinct等。我们可以使用Stream API的Collection操作来实现求两个集合的交集:

java 复制代码
List<Integer> intersection = list1.stream()
        .filter(list2::contains)
        .collect(Collectors.toList());

System.out.println("交集为:" + intersection);

这种方式的思路和第二种方式类似,不同之处在于使用了Collection操作的distinct方法来去重,保证最后的交集中不包含重复的元素。

总结: 三种方式在求两个集合的交集时都使用了Stream API,其中第一种方式是使用传统的循环遍历,思路简单但代码量较大;第二种和第三种方式都使用了Stream API的filter操作,代码更加简洁和高效。在实际应用中,我们可以根据具体的场景选择合适的方式。

相关推荐
爱隐身的官人11 分钟前
新后端漏洞(上)- Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)
java·tomcat·ajp
多打代码15 分钟前
2025.09.05 用队列实现栈 & 有效的括号 & 删除字符串中的所有相邻重复项
python·算法
@CLoudbays_Martin1122 分钟前
为什么动态视频业务内容不可以被CDN静态缓存?
java·运维·服务器·javascript·网络·python·php
IT小农工25 分钟前
Windows 文件资源管理器无法预览文件内容word、ppt、excel、pdf
windows·word·powerpoint
四谎真好看36 分钟前
Java 学习笔记(进阶篇2)
java·笔记·学习
程序猿炎义1 小时前
【NVIDIA AIQ】自定义函数实践
人工智能·python·学习
上官浩仁1 小时前
springboot ioc 控制反转入门与实战
java·spring boot·spring
THMAIL1 小时前
深度学习从入门到精通 - BERT与预训练模型:NLP领域的核弹级技术详解
人工智能·python·深度学习·自然语言处理·性能优化·bert
叫我阿柒啊1 小时前
从Java全栈到前端框架:一位程序员的实战之路
java·spring boot·微服务·消息队列·vue3·前端开发·后端开发
mqiqe2 小时前
架构-亿级流量性能调优实践
java·架构