java8利用Stream方法求两个List对象的交集、差集与并集(即:anyMatch和allMatch和noneMatch的区别详解)
1、anyMatch
判断数据列表中是否存在任意一个元素符合设置的predicate条件,如果是就返回true,否则返回false。
接口定义:
boolean anyMatch(Predicate<? super T> predicate);
方法描述:
在anyMatch 接口定义中是接收 Predicate 类型参数,在Lamdba表达式中 Predicate<T> 是接收一个T类型参数,然后经过逻辑验证返回布尔值结果。这里anyMatch表示,判断的条件里,任意一个元素符合条件,就返回true值。
使用场景:
两个集合的交集
@Testpublic void a17() {List<User> list = new ArrayList<>();list.add(new User("张三", 12, "南京"));list.add(new User("李四", 13, "北京"));list.add(new User("王五", 14, "苏州"));list.add(new User("王五", 17, "苏州"));List<User> userList = new ArrayList<>();userList.add(new User("李四", 13, "北京"));userList.add(new User("王五", 20, "广州"));// 获取两个集合中有相同名字或者年龄相同的,只要满足其中一个条件即可,只会返回list集合里面的元素,有先后顺序返回List<User> users1 = list.stream().filter(a -> userList.stream().anyMatch(b -> a.getName().equals(b.getName()) || a.getAge() == b.getAge())).collect(Collectors.toList());// 获取两个集合中相同名字并且年龄相同的,必须同时满足两个条件List<User> users2 = list.stream().filter(a -> userList.stream().anyMatch(b -> a.getName().equals(b.getName()) && a.getAge() == b.getAge())).collect(Collectors.toList());users1.forEach(item -> {System.out.println(item.getName() + item.getAge() + item.getEmailAddress());});/** 第一种结果展示:* 李四13北京* 王五14苏州* 王五17苏州*/users2.forEach(item -> {System.out.println(item.getName() + item.getAge() + item.getEmailAddress());});/** 第二种结果展示:* 李四13北京*/}@Test
public void a15() {Stream<String> stream = Stream.of("ac", "bcddddd", "bd");// 判断stream中其中任何一个元素中只要有包含b字符串或者l字符串就返回trueboolean isMatch = stream.anyMatch(str -> str.contains("b") || str.contains("l"));System.out.println(isMatch); // true
}
2、allMatch
判断数据列表中全部元素都符合设置的predicate条件,如果是就返回true,否则返回false,流为空时总是返回true。
接口定义:
boolean allMatch(Predicate<? super T> predicate);
方法描述:
在allMatch 接口定义中是接收 Predicate 类型参数,在Lamdba表达式中 Predicate<T> 是接收一个T类型参数,然后经过逻辑验证返回布尔值结果。这里allMatch表示,判断的条件里,全部元素符合条件,就返回true值。
适用场景:
基本类型的集合,但不适合于对象集合(我自己的理解)
allMatch里面不适合写 && ,只适合写 ||,如果写&&,编译器会自动报黄色波浪线
@Test
public void a18() {List<String> typeList1 = Arrays.asList("1", "2");List<String> typeList2 = Arrays.asList("1", "2", "3", "4");// 集合列表中全部元素必须在allMatch里面的那些字符串,只要全部元素中有任意一个不同的元素在AllMatch中就返回falseboolean isMatch1 = typeList1.stream().allMatch(a -> a.equals("1") || a.equals("2") || a.equals("3"));boolean isMatch2 = typeList2.stream().allMatch(a -> a.equals("1") || a.equals("2") || a.equals("3"));System.out.println(isMatch1); // trueSystem.out.println(isMatch2); // false
}@Test
public void a16() {Stream<String> stream = Stream.of("abc", "abc", "bcd");// 判断stream中全部所有元素必须全部包含b字符串和c字符串就返回true,如果有一个元素不包含这两个字符串就返回falseboolean isMatch = stream.allMatch(str -> str.contains("b") && str.contains("c"));System.out.println(isMatch); // true
}
3、noneMatch
判断数据列表中全部元素都不符合设置的predicate条件,如果是就返回true,否则返回false,流为空时总是返回true。
接口定义:
boolean noneMatch(Predicate<? super T> predicate);
方法描述:
在noneMatch接口定义中是接收 Predicate 类型参数,在Lamdba表达式中 Predicate<T> 是接收一个T类型参数,然后经过逻辑验证返回布尔值结果。这里noneMatch表示与allMatch相反,判断的条件里的元素,所有的元素都不符合,就返回true值。
适用场景:
两个集合的差集 (本人只想到这么做,如果有更简洁的可以告诉我怎么写,感谢0.0)
@Test
public void a17() {List<User> list = new ArrayList<>();list.add(new User("张三", 12, "南京"));list.add(new User("李四", 13, "北京"));list.add(new User("王五", 14, "苏州"));list.add(new User("王五", 17, "苏州"));List<User> userList = new ArrayList<>();userList.add(new User("李四", 13, "北京"));userList.add(new User("王五", 20, "广州"));// 获取list集合和userList集合过滤掉两者集合中名字和年龄相同的数据后,只返回list集合的数据List<User> users3 = list.stream().filter(a -> userList.stream().noneMatch(b -> a.getName().equals(b.getName()) && a.getAge() == b.getAge())).collect(Collectors.toList());// 获取userlist集合和list集合过滤掉两者集合中名字和年龄相同的数据后,只返回userList集合的数据List<User> users4 = userList.stream().filter(a -> list.stream().noneMatch(b -> a.getName().equals(b.getName()) && a.getAge()==b.getAge())).collect(Collectors.toList());// 获取list和userList集合之间的差集,将上面两者集合合并,就是两个集合的差集List<User> arrayList = new ArrayList<>();arrayList.addAll(users3);arrayList.addAll(users4);arrayList.forEach(item -> {System.out.println(item.getName() + item.getAge() + item.getEmailAddress());});/** 两者集合之间的差集* 张三12南京* 王五14苏州* 王五17苏州* 王五20广州*/System.out.println("-------------------");users3.forEach(item -> {System.out.println(item.getName() + item.getAge() + item.getEmailAddress());});/** 只返回list集合中过滤掉之后的元素集合* 张三12南京* 王五14苏州* 王五17苏州*/System.out.println("-------------------");users4.forEach(item -> {System.out.println(item.getName() + item.getAge() + item.getEmailAddress());});/** 只返回userList集合中过滤掉之后的元素集合* 王五20广州*/
}@Test
public void a19() {List<String> typeList1 = Arrays.asList("1", "2");List<String> typeList2 = Arrays.asList("1", "2", "3", "4");// 集合列表中全部元素只要都不在noneMatch里面的判断中,就返回true,集合列表中任何元素中只要有一个在noneMatch的判断中就返回falseboolean isMatch1 = typeList1.stream().noneMatch(a -> a.equals("3") || a.equals("4"));boolean isMatch2 = typeList2.stream().noneMatch(a -> a.equals("1") || a.equals("2") || a.equals("3"));System.out.println(isMatch1); // trueSystem.out.println(isMatch2); // false
}/** noneMatch */
@Test
public void a20() {Stream<String> stream = Stream.of("dddd", "ee", "qqq", "bcfff");// 判断 stream 中所有的元素都不是以 a 开头,就返回true,如果所有的元素中只要其中一个元素是以a开头的,就返回falseboolean isMatch = stream.noneMatch(str->str.startsWith("a"));System.out.println(isMatch); // true
}
相关文章:
java8利用Stream方法求两个List对象的交集、差集与并集(即:anyMatch和allMatch和noneMatch的区别详解)
1、anyMatch 判断数据列表中是否存在任意一个元素符合设置的predicate条件,如果是就返回true,否则返回false。 接口定义: boolean anyMatch(Predicate<? super T> predicate); 方法描述: 在anyMatch 接口定义中是接收 P…...
Centos7下生成https自签名证书
1、安装openssl yum install openssl2、生成带密码的私有秘钥文件 openssl genrsa -des3 -out server.key 2048使用带密码的私有秘钥文件时需要输入密码,这里直接输入:123456 3、生成不带密码的私有秘钥文件 openssl rsa -in server.key -out serve…...
从中序和后序遍历序列构造二叉树
注意:该解法是基于二叉树中的值不存在重复所写的。 代码如下,可开袋即食 class Solution {private Map<Integer,Integer> map;public TreeNode buildTree(int[] inorder, int[] postorder) {map new HashMap<>();for(int i 0; i < in…...
Apache ActiveMQ (版本 < 5.18.3) (CNVD-2023-69477)RCE修复方案/缓解方案
一、漏洞描述 Apache ActiveMQ 是美国阿帕奇(Apache)基金会的一套开源的消息中间件,它支持 Java 消息服务、集群、Spring Framework 等。 二、漏洞成因 ActiveMQ 默认开放了 61616 端口用于接收 OpenWire 协议消息,由于针对异常…...
61. 旋转链表、Leetcode的Python实现
博客主页:🏆李歘歘的博客 🏆 🌺每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点,以及职场小菜鸡的生活。🌺 💗点关注不迷路,总有一些📖知识点&am…...
基于tpshop开发多商户源码支持手机端+商家+门店 +分销+淘宝数据导入+APP+可视化编辑
tpshop多商户源码,tpshop商城源码,tpshop b2b2c源码-支持手机端商家门店 分销淘宝数据导入APP可视化编辑 tpshop商城源码算是 thinkphp框架里做的比较早 比较好的源码了,写法简明 友好面向程序猿。 这是一款前几年的版本 虽然后台看着好了些,丝毫不影响…...
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑 1.Elasticsearch 产生背景 大规模数据如何检索 如:当系统数据量上了 10 亿、100 亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题&a…...
HTML简单实现v-if与v-for与v-model
Vue启动!! 首先VIewModel将View和Model连接一起,Model的数据改变View的数据也变 使用Visual Studio Code 启动Vue需要vue.js插件和导入CDN(包) vue.js插件:CTRL shift x 在搜索栏搜 索vue.js安装即可 CDN: http…...
【学习笔记】[PA2021] Fiolki 2
Part 1 前置知识:LGV引理 摘抄自oi-wiki: L G V LGV LGV引理可以用来处理有向无环图上不相交路径计数等问题。 基本定义: w ( P ) w(P) w(P)表示 P P P这条路径上所有边的 边权之积 。(路径计数时,可以将边权都设为…...
计算1到100的和
一、不好的写法 public static void main(String[] args) {int sum 0;int n 100;for (int i 1; i < n; i) {sum i;}System.out.println("sum" sum);}1.定义两个整型变量; 2.执行100次加法运算; 3.打印结果到控制台; 二、好…...
C++下OpenMP耗时统计
在C中,如果你使用OpenMP进行并行计算,你可以使用omp_get_wtime()函数来测量代码段的执行时间。这个函数返回一个double类型的值,表示从某一固定点到当前时间的秒数。因此,你可以在代码的开始和结束点分别调用这个函数,…...
PTA 函数题(C语言)-- 阶乘计算升级版
题目title: 阶乘计算升级版 题目作者: 陈越 浙江大学 本题要求实现一个打印非负整数阶乘的函数。 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数,其值不超过1000。如果N是非负整数&#…...
内网穿透入门
内网穿透 内网穿透(英文:Port Forwarding)是一种网络技术,用于将公共互联网(外网)的请求转发到私有局域网(内网)中的特定设备或服务。在许多情况下,设备或服务位于一个局…...
Pickle pyhton反序列化
参考文章 Python pickle反序列化浅析 Pickle包含四种方法 pickle.dump(obj, file) 将obj对象进行封存,即序列化,然后写入到file文件中 注:这里的file需要以wb打开(二进制可写模式) pickle.load(file) 将file这个文件进行解封,即反序列化 …...
动静分离技术
一、HAproxy 动静分离 1、概念: HAproxy 动静分离技术是一种用于优化 Web 服务器性能和提高用户体验的策略,它通过将动态内容和静态内容分别路由到不同的后端服务器来实现,减轻服务器负载,提高网站的响应速度。 动态内容包括由…...
STM32单片机智能小车一PWM方式实现小车调速和转向
目录 1. 电机模块开发 2. 让小车动起来 3. 串口控制小车方向 4. 如何进行小车PWM调速 5. PWM方式实现小车转向 1. 电机模块开发 L9110s概述 接通VCC,GND 模块电源指示灯亮, 以下资料来源官方,具体根据实际调试 IA1输入高电平ÿ…...
灰狼优化算法(GWO)python
目录 一、灰狼优化算法的python实现 二、灰狼优化算法与遗传算法的对比分析(python) 2.1 GWO1.py 2.2 GA1.py 2.3 GWO_vs_GA.py 2.4 运行结果 三、基于莱维飞行改进的灰狼优化算法的python实现 一、灰狼优化算法的python实现 import numpy as …...
项目知识点总结-住房图片信息添加-Excel导出
(1)住房信息添加 Controller: RequestMapping("/add")public String add(Home home, Model model) throws IOException{String sqlPath null;//定义文件保存的本地路径String localPath"D:\\AnZhuang\\Java项目\\选题\\Xin-…...
第三届iEnglish全国ETP大赛决赛即将启动
如今,寓教于乐的学习方式越来越受到家长和孩子的欢迎,“玩中学”成为一种既能培养兴趣又有助于孩子成长的学习趋势。 以“玩转英语,用iEnglish”为活动主题的第三届全国ETP大赛即将于本周五(11月3日)迎来总决赛的抽签仪式。据主办方iEnglish智能英语学习解决方案相关负责人称,…...
创造产业链协同优势后,凌雄科技在DaaS行业转动成长飞轮
企业服务领域,一直存在一种共识:做好很难,但一旦服务模式跑通了,得到了市场的认可,要滚起雪球就会事半功倍。 重资产、重运营的DaaS(设备及服务)赛道,是个非常典型的细分领域。在这…...
从PC到移动端:百度地图电子围栏的绘制实践与坐标检测全解析
1. 电子围栏技术概述与应用场景 电子围栏作为地理围栏(Geo-Fencing)技术的具体实现形式,本质上是通过虚拟边界对物理空间进行数字化划分。想象一下,就像小朋友用粉笔在地上画出一个游戏区域,只不过我们把这种能力搬到了…...
若依RuoYi-Vue集成wangEditor:从零到一构建富文本内容管理模块
1. 为什么选择wangEditor与若依框架组合 在前后端分离的开发模式中,富文本编辑器是内容管理系统的核心组件。我实测过市面上主流的编辑器,wangEditor以其轻量级、易扩展的特性脱颖而出。特别是对于使用若依(RuoYi-Vue)框架的开发者来说,这个组…...
LN2407 PWM/PFM 控制 DC-DC 降压稳压器
■ 产品概述 LN2407 是一款由基准电压源、振荡电路、比较器、PWM/PFM 控制电路等构成的 CMOS 降压 DC/DC 调整器。利用 PWM/PFM 自动切换控制电路达到可调占空比,具有全输入电压范围(2.0-6V)内的低纹波、高效率和大输出电流等特点…...
如何在Mac上免费实现NTFS读写?终极完整解决方案
如何在Mac上免费实现NTFS读写?终极完整解决方案 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management for NTFS…...
Windows Defender 彻底移除工具:2025年系统优化终极指南
Windows Defender 彻底移除工具:2025年系统优化终极指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors/w…...
为什么ResNet的152层比VGG16快?图解残差连接的计算优化与内存管理
为什么ResNet的152层比VGG16快?图解残差连接的计算优化与内存管理 在深度学习领域,网络深度与计算效率似乎总是一对矛盾体——直到ResNet的出现打破了这一认知。当152层的ResNet在ImageNet竞赛中以更低计算量击败16层的VGG时,整个计算机视觉…...
Spring Cloud微服务架构下的医院信息系统深度解析与实践指南
Spring Cloud微服务架构下的医院信息系统深度解析与实践指南 【免费下载链接】HIS HIS英文全称 hospital information system(医疗信息就诊系统),系统主要功能按照数据流量、流向及处理过程分为临床诊疗、药品管理、财务管理、患者管理。诊疗…...
Redis哨兵模式内存缩容
Redis哨兵模式内存缩容检查节点信息从节点内存缩容最大内存配置修改停机缩容缩容后检查主节点内存缩容回退操作检查节点信息 通过哨兵获取集群名和主节点地址: # docker exec -it pod_sentinel_1 redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:…...
HR 人才库管理全解:从搭建到激活的实操指南
人才是企业发展的核心资源,HR 人才库管理作为人力资源管理的重要环节,是企业沉淀、激活与复用人才资源的关键手段。传统人才管理模式下,信息分散、检索低效、资源沉睡等问题普遍存在,难以支撑企业高效招聘与长期人才储备需求。 系…...
ONNX Runtime性能优化:InferenceSession.run函数的高效使用技巧
1. ONNX Runtime与InferenceSession.run函数基础 ONNX Runtime是一个高性能的推理引擎,专门用于部署ONNX格式的机器学习模型。在实际应用中,模型的推理性能往往直接影响整个系统的响应速度和资源利用率。而InferenceSession.run函数正是这个过程中的核心…...
