当前位置: 首页 > news >正文

Java8-求两个集合取交集

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

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

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);

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

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操作来求交集:

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操作来实现求两个集合的交集:

List<Integer> intersection = list1.stream().filter(list2::contains).collect(Collectors.toList());System.out.println("交集为:" + intersection);

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • whaler_通过镜像导出dockerfile
  • 【我的OpenGL学习进阶之旅】讲一讲GL_TEXTURE_2D和GL_TEXTURE_EXTERNAL_OES的区别
  • 【Linux】管道通信和 system V 通信
  • 独占电脑资源来执行一个应用
  • 1111111111111111111111
  • uni-app全局文件与常用API
  • Redis在SpringBoot中配置
  • 【1.0】drf初识
  • 如何使用 API list 极狐GitLab 群组中的镜像仓库?
  • Docker 部署常用中间件(redis,rabbitMQ,mysql8,es,kibana,nginx等)亲测成功~~~
  • Linux没有telnet 如何测试对端的端口状态
  • c++中的斐波那契数列(Fibonacci Sequence)和背包问题(Knapsack Problem)
  • 3. 类的生命周期
  • 深度学习loss
  • 【QT】QT 窗口(菜单栏、工具栏、状态栏、浮动窗口、对话框)
  • 分享的文章《人生如棋》
  • 2017前端实习生面试总结
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ES6核心特性
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • npx命令介绍
  • scrapy学习之路4(itemloder的使用)
  • 工程优化暨babel升级小记
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 推荐一个React的管理后台框架
  • 新书推荐|Windows黑客编程技术详解
  • 一个JAVA程序员成长之路分享
  • C# - 为值类型重定义相等性
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​iOS实时查看App运行日志
  • ​VRRP 虚拟路由冗余协议(华为)
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #pragma pack(1)
  • #QT 笔记一
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (排序详解之 堆排序)
  • (十一)图像的罗伯特梯度锐化
  • (四)事件系统
  • (转)VC++中ondraw在什么时候调用的
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .net流程开发平台的一些难点(1)
  • @media screen 针对不同移动设备
  • [20170705]diff比较执行结果的内容.txt
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [Android] Implementation vs API dependency
  • [C#]使用OpenCvSharp图像滤波中值滤波均值滤波高通滤波双边滤波锐化滤波自定义滤波
  • [C++]C++基础知识概述