如何在一个集合对象中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.mzph.cn/news/641930.shtml

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

相关文章

麒麟linux混血安装kali linux工具集合

因为日常要使用麒麟Linux办公&#xff0c;缺少常见的网络管理软件&#xff0c;尝试麒麟linux混血安装kali linux工具集合。 步骤1&#xff1a; 添加Kali的APT源&#xff1a; echo "deb http://http.kali.org/kali kali-rolling main non-free contrib" | sudo tee…

【吃灰开发板复活】DIY全志V3s随身终端屏幕适配,LVGL以及各种外设驱动移植教程

在上周的文章中介绍了一款因作者想要学习Linux而动手DIY的终端设备V3S-PI&#xff0c; 《梦回2004&#xff01;我用全志V3s做了个成本100元&#xff0c;功能媲美MP4的随身终端》&#xff1a;梦回2004&#xff01;我用全志V3s做了个成本100元&#xff0c;功能媲美MP4的随身终端…

[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

数据库缓存策略

数据库缓存策略 以下是数据库与缓存的五种常见策略。 1缓存旁路 缓存旁路&#xff08;Cache-Aside&#xff09; 在缓存旁路策略中&#xff0c;数据库缓存位于数据库旁边。当应用程序请求数据时&#xff0c;它会首先检查缓存 如果缓存中存在数据&#xff08;缓存命中&#xff…

c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)

文章目录 1. 415. 字符串相加题目详情代码1思路1代码2思路2 2. 125. 验证回文串题目详情代码1&#xff08;按照要求修改后放到新string里&#xff09;思路1代码2(利用双指针/索引)思路2 3. 541. 反转字符串 II题目详情代码1思路1 4. 557. 反转字符串中的单词 III题目详情代码1&…

逆矩阵举例

考虑一个 22的矩阵A 和其逆矩阵A −1的情况&#xff1a; 要求A的逆矩阵&#xff0c;首先计算A的行列式∣A∣&#xff1a; 如果 ∣A∣≠0, 则 A 可逆&#xff0c;逆矩阵 A −1的计算如下&#xff1a; 举例&#xff0c;考虑矩阵&#xff1a; 计算行列式 ∣A∣(24)−(31)8−35…

精品基于Uniapp+springboot智慧校园管理系统App课程选课成绩

《[含文档PPT源码等]精品基于Uniappspringboot智慧校园管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;springboot、ssm …

leaflet学习笔记-带过滤的图例(九)

前言 图例不只能够帮助我们在查看地图的时候更加方便容易地分辨不同颜色代表的要素&#xff0c;本文要介绍的图例组件还可以按需求过滤掉不用显示的要素&#xff0c;使地图的更能清晰的显示我们需要显示的内容 技术核心 说到过滤要素&#xff0c;第一时间想到的就是滑块组件…

一个大的rosbag数据包怎么分割成一个小的数据包?

文章目录 1. 按时间范围分割&#xff1a;2. 按照消息类型分割&#xff1a;3. 使用split命令&#xff1a;4. 使用Python脚本&#xff1a; 在ROS&#xff08;机器人操作系统&#xff09;中&#xff0c; rosbag是一个用于记录和回放ROS主题消息的工具。如果你有一个大的 rosbag数…

[C++] external “C“的作用和使用场景(案例)

C中extern "C"的作用是什么&#xff1f; 在 C 中&#xff0c;extern "C" 的作用是告诉编译器按照 C 语言的规范来处理函数名和变量名。这是因为 C 编译器会对函数名和变量名进行名称修饰(name mangling)&#xff0c;以区分不同的函数和变量。而在 C 语言中…

搭建互联网医疗平台:构建智慧医院APP的开发指南

本文将从技术层面出发&#xff0c;为大家提供构建互联网医疗平台、打造智慧医院APP的详细开发指南。 一、确定需求与功能 在开始开发之前&#xff0c;首先需要明确智慧医院APP的需求与功能。这包括患者预约挂号、在线咨询、病历查看、医疗报告查询等功能。 二、选择合适的开发…

安科瑞ARTM系列-无线测温解决方案

产品简介 温度在线监测主要是针对高低压开关柜内母排搭接点&#xff0c;断路器触头、电缆接头等电气连接点的温度进行监测&#xff0c;防止在运行过程中因氧化、松动、灰尘等因素造成接点接触电阻过大而发热成为隐患&#xff0c;温度在线监测能够提升设备安全保障&#xff0c;及…

宝塔面板优惠券(折扣券)领取入口及使用教程

宝塔面板是一款服务器管理软件&#xff0c;支持Linux与Windows系统&#xff0c;提供了丰富的功能和插件&#xff0c;让服务器管理变得更加简单、安全、高效。为了让更多用户体验到宝塔面板的便利&#xff0c;官方会不定期推出优惠券活动。本文将为大家详细介绍宝塔面板优惠券的…

ROS:rosdep与ROS2的安装记录

鱼香ROS一键安装&#xff1a; 一键安装微信使用指南 | 鱼香ROS rosdep安装&#xff1a; rosdep 是一个在ROS&#xff08;Robot Operating System&#xff09;生态系统中非常重要的工具&#xff0c;它用于安装ROS包的依赖项。rosdep 确保了ROS包所需的系统依赖项能够被正确安装…

MNIST 数据集详析:使用残差网络RESNET识别手写数字(文末送书)

MNIST 数据集已经是一个几乎每个初学者都会接触的数据集, 很多实验、很多模型都会以MNIST 数据集作为训练对象, 不过有些人可能对它还不是很了解, 那么今天我们一起来学习一下MNIST 数据集&#xff0c;同时构建残差网络来识别手写数字。 1.MNIST 介绍 MNIST手写数字数据库具有…

spring-framework6.x版本源码构建

6.x.修改gradle仓库构建 IDEA版本及gradle构建设置 在gradle指定仓库地址/wrapper/dists/找到与gradle wrapper相对应的gradle版本&#xff0c;在gradle的init.d/目录下新建init.gradle文件&#xff0c;内容如下&#xff1a; allprojects{repositories {mavenLocal()maven { …

中仕教育:选调生和考研可以一起准备吗?

研究生入学考试&#xff0c;是本科生们提升学历继续深造的主要途径。而选调生&#xff0c;是指通过考试选拔的优秀应届毕业生&#xff0c;经过锻炼后分配到各级工作。这两者作为大部分人选择的方向&#xff0c;发展前景都是比较好的。 考研和选调生可以一起准备吗? 是可以的…

python+ctypes:ctypes调用so库

之前接到一个任务就是用python调用so库&#xff0c;也就是python调用cso库&#xff0c;也是第一次做这个&#xff0c;而且要的还很急&#xff0c;导致我也很忙碌&#xff0c;很多之前做的事请都丢下了。下面就介绍了ctypes调用so的简单例子。 ctypes 是 Python 的外部函数库。…

[MySQL]关于表的增删改查

目录 1.插入 1.1单行数据全列插入 1.2多行插入&#xff0c;指定列插入 ​编辑2.查询 2.1全列查询 2.2指定列查询 3.3查询字段为表达式 2.4别名 ​编辑2.5去重 2.6排序 2.7条件查询 2.7.1基本查询: 2.7.2 AND 和OR 2.7.3范围查询 2.7.4模糊查询 2.7.5分页查询 limit …