如何在一个集合对象中A排除另外一个集合对象B中A中拥有的数据通用思路,很精妙!

标题是什么意思呢?

假如我有一个集合对象A,数据有1,2,3,4,5,6

另外一个集合对象B,数据有2,4,5

那么在A中排除B拥有的数据就是

最终需要返回的结果就是1,3

那么我们一般一开始的想法其实就是在集合对象中A遍历取到每一个元素,然后将元素再与集合对象B中遍历取到的每一个元素,做一 一对比,,如果在集合对象B中没有找到的话,那么就取出该此时集合对象中遍历的当前元素,然后放到一个最终的集合去。

所以我们就是会写两个for循环,外层循环遍历集合对象A,内层循环遍历集合对象B,反之,

外层循环遍历集合对象B,内层循环遍历集合对象A,也是可以的。结果都是一样的。

假如现在我们构建一个实体类叫做Entity,我们看看它的结构:

然后我们构造两个集合。去存放不同的Entity,充当集合对象A,集合对象B

集合对象A存放的是从1-10;

集合对象B存放的是偶数,也就是2,4,6,8,10;

那么最终排除后的结果就是奇数,也就是1,3,5,7,9

然后现在编写代码,按照我们一开始最粗暴的想法,就是两个for循环嵌套的做法:

我们看一下输出结果:

结果显示确实是奇数,那就证明我们代码写的没问题。

那么我们可以换一种更加方便通用的思路,就是用stream流的方式先做逻辑映射,然后再使用filter过滤掉contains为false的数据,如下:

直接就可以用三行代码代替了,是不是很方便。

所以模板思路就是以后我们要在哪一个集合对象里面排除另一个集合对象,那么我们就将要排除的做map映射,然后对另一个集合对象做filter过滤掉contains为false的,就是最终的结果,以这个题目就是A排除B,那么就将B做map映射,将A做filter过滤掉contains为false的。

如果我们要判断两个集合对象是否存在重复的。我们也可以用这个方法,但是此时就对A和B没做特定哪一个做map,哪一个做filter了,都行的。只是我们需要将里面的那个contains过滤掉为true的,然后最终结果如果返回的集合存在数据,就代表有交集了,有交集,肯定就是出现重复的了。

也就是:

输出结果:重复的就是偶数2 4 6 8 10

总结:

在一个集合对象中A排除另外一个集合对象B中A中拥有的数据通用思路可以直接用三行代码替换

,对要排除的做map逻辑映射,另外一个对象做stream流的filter过滤掉contains为false的。

Set<String> codeSet = 排除的集合对象.stream().map().collect(Collectors.toSet()) ;

List<T> res = 另一个集合对象.stream().filter(arg -> !codeSet.contains(arg)).collect(Collectors.toList());

return res ;

备注:如果要判断两个集合对象是否存在重复的元素,也是这个思路,只不过是过滤掉contains为true的,此时不需要按照上面那这个模板思路谁map谁filter了。

温馨提示:

我们也可以导入hutool工具包,然后里面其实有很多的求差集,补集,交集,并集。

最后:

如果大家觉得这篇文章对你们有所帮助的话,麻烦点个免费的小赞赞,谢谢,也祝各位码农在未来的IT道路上越走越远!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/424523.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux之权限(内容详细,细节满满)

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力 目录 一.前言 二.权限修改的两种方法 …

LeetCode 670 最大交换数

周一&#xff0c;非常冷&#xff0c;大风呼呼的&#xff0c;上班路都走不动。 好消息&#xff0c;马上要过年了。大风吹&#xff0c;天气好。 过年过年&#xff0c;回家过年~ 学生时代的迷茫是不应该存在的&#xff0c;最好的时光应该尽情享受&#xff0c;而不应该自己给加层…

UI设计师主要是做什么的?

由于用户体验越来越受到重视&#xff0c;UI 设计师也成为现代互联网行业不可或缺的职业。他们通过美化和优化软件界面&#xff0c;为用户带来舒适的使用体验&#xff0c;目标是提高用户满意度。本文将对 UI 进行深入分析设计人员的工作职责和 UI 设计人员的工作内容&#xff0c…

设计模式-委托模式

设计模式专栏 模式介绍模式特点应用场景委托模式与代理模式的区别代码示例Java实现委托模式Python实现委托模式 委托模式在spring中的应用 模式介绍 委托模式是一种行为模式&#xff0c;用于在面向对象设计中解决多个对象接收并处理同一请求的问题。它通过将请求委托给另一个对…

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心&#xff0c;Kotlin 在 Android双击图片放大移动图中双击点到ImageView区域中心&#xff0c;Kotlin-CSDN博客 基础上&#xff0c;这次使用ScaleGestureDetector检测两根手指的缩放动作&a…

Dubbo源码解析第一期:如何使用Netty4构建RPC

一、背景 早期学习和使用Dubbo的时候&#xff08;那时候Dubbo还没成为Apache顶级项目&#xff09;&#xff0c;写过一些源码解读&#xff0c;但随着Dubbo发生了翻天覆地的变化&#xff0c;那些文章早已过时&#xff0c;所以现在计划针对最新的Apache Dubbo源码来进行“阅读理解…

插件化/热修复

1、如何规避Android P对私有API的访问限制 ● Android&#xff1a;Pie — 9.0 — 28 ● 一般都是通过反射访问私有 API 1.1、私有API Android源码查看网址 &#xff08;1&#xff09;hide public hide public方法无法直接使用&#xff0c;可以自行编译系统源码&#xff0c…

【Visual Object Tracking】Learning notes

Dense Optical Tracking: Connecting the Dots 参考学习来自&#xff1a; 单目标跟踪 Siamese系列网络&#xff1a;SiamFC、SiamRPN、one-shot跟踪、one-shotting单样本学习、DaSiamRPN、SiamRPN、SiamMask 单目标跟踪&#xff1a;跟踪效果 / 单目标跟踪&#xff1a;数据集处…

Python入门(一)

anaconda安装 官网&#xff1a;https://www.anaconda.com下载 jupyter lab 简介&#xff1a; 包含了Jupyter Notebook所有功能。 JupyterLab作为一种基于web的集成开发环境&#xff0c;你可以使用它编写notebook&#xff0c;操作终端&#xff0c;编辑markdown文本&#xf…

前端使用css去除input框的默认样式

关键点&#xff1a; /* 关键点&#xff0c;让输入框无边框 */outline:none; border:none; 1.效果图 2.html <div class"container"><input type"text" placeholder"请输入用户名"><input type"text" placeholder&q…

揭秘安全测试--一起学习吧之安全测试

笔者最近又有个迭代要上线了~正处于安全测试阶段&#xff0c;今天想和大家一起谈谈安全测试相关的知识。 安全测试是指对应用程序存在的安全问题进行测试&#xff0c;目的是防止意外或者恶意对应用程序进行攻击。安全测试分为安全功能测试和安全渗透测试&#xff0c;其中安全功…

Qt 多次绘图

使用Qt 的时候发现&#xff1a; 背景&#xff1a;自己定义一个类&#xff0c;把它和某个ui文件绑定。(类似 Qt creator 默认创建的工程&#xff09;问题&#xff1a;当鼠标在窗口内单击的时候会触发2次绘图。&#xff1f;难道不应该是一次吗&#xff1f; 于是开始了如下的测试…