java8对list的操作两个List集合取交集、并集、差集
两个List集合取交集、并集、差集
list1.removeAll(list2):从list1中移除存在list2中的元素。
调用流程:removeAll->contains->equals方法,对于引用类型,要使用removeAll,需要重写equals方法
removeAll源码:
public boolean removeAll(Collection<?> c) {Objects.requireNonNull(c);boolean modified = false;Iterator<?> it = iterator();while (it.hasNext()) {if (c.contains(it.next())) {it.remove();modified = true;}}return modified;
}
contains源码:
public boolean contains(Object o) {Iterator<E> it = iterator();if (o==null) {while (it.hasNext())if (it.next()==null)return true;} else {while (it.hasNext())if (o.equals(it.next()))return true;}return false;
}
当对象o不为空时,迭代判断用到了Object的equals方法,而Object的equals方法指的是两个对象的引用是否相等,如果我们要判断两个对象的内容相等,这里就需要重写equals方法。
JDK1.8 lambda表达式取交集、并集、差集(String类型,已重写了equals方法)
public static void main(String[] args) {List<String> list1 = new ArrayList<String>();list1.add("1");list1.add("2");list1.add("3");list1.add("5");list1.add("6");List<String> list2 = new ArrayList<String>();list2.add("2");list2.add("3");list2.add("7");list2.add("8");// 交集List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(toList());System.out.println("---交集 intersection---");intersection.parallelStream().forEach(System.out :: println);// 差集 (list1 - list2)List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(toList());System.out.println("---差集 reduce1 (list1 - list2)---");reduce1.parallelStream().forEach(System.out :: println);// 并集List<String> listAll = list1.parallelStream().collect(toList());List<String> listAll2 = list2.parallelStream().collect(toList());listAll.addAll(listAll2);System.out.println("---并集 listAll---");listAll.parallelStream().forEachOrdered(System.out :: println);// 去重并集List<String> listAllDistinct = listAll.stream().distinct().collect(toList());System.out.println("---得到去重并集 listAllDistinct---");listAllDistinct.parallelStream().forEachOrdered(System.out :: println);System.out.println("---原来的List1---");list1.parallelStream().forEachOrdered(System.out :: println);System.out.println("---原来的List2---");list2.parallelStream().forEachOrdered(System.out :: println);}
上述转载自:“https://www.cnblogs.com/lyrb/p/12923615.html”,感谢!!
下面这个是遇到的一个问题
//两个list长度相等,对应下标数值相加(list类型为Integer)
List<Integer> list1 = Arrarys.asList(1,2,3,4,5);
List<Integer> list2 = Arrarys.asList(1,2,3,4,5);List<Integer> result = IntStream.range(0, list1.size()) .map(i -> list1.get(i) + list2.get(i)) .boxed() .collect(Collectors.toList());//此为list长度相等情况,若不等,将长度较短的那个list补0;
IntStrean.range(0, Math.min(list1.size(), list2.size()));
java8对list的操作两个List集合取交集、并集、差集相关推荐
- 两个List集合取交集、并集、差集
两个List集合取交集.并集.差集 list1.removeAll(list2):从list1中移除存在list2中的元素. 调用流程:removeAll->contains->equal ...
- 两个List集合取交集
两个List集合取交集.并集.差集.去重并集的一个简单Demo,可供参考: import java.util.ArrayList; import java.util.List; import stat ...
- 【Java用法】java 8两个List集合取交集、并集、差集、去重并集
在业务的开发过程中会经常用到两个List集合相互取值的情况,于是记录在此,方便后续使用哦~~~ public class ListTest {public static void main(Strin ...
- 两个List集合取交集、并集、差集、去重并集
package com.example.list_test;import java.util.ArrayList; import java.util.List;import static java.u ...
- java中两个list对象取交集、差集
在一般操作中,对于list集合取交集.差集.并集,比较简单,网上有很多例子,如: 今天我们来说一下对于两个list集合该如何取交集与并集: 如下两个集合:groupEntityList.saveEnt ...
- lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- 求两个Linux文本文件的交集、差集、并集
一.交集 sort a.txt b.txt | uniq -d 二.并集 sort a.txt b.txt | uniq 三.差集 a.txt-b.txt:sort a.txt b.txt b.txt ...
- oracle 任意结果集交集,oracle两个结果集取交集 sql语句取交集
Oracle求两个结果集的交集? 从表1a,表2B中选择a.id,a.name 其中substr(a.name,1,1)=b.value 使用union all可以实现Oracle中union和uni ...
最新文章
- 给history命令加上执行用户和时间
- oracle apex接口文件,Oracle之APEX深入开发指南
- 计算机网络·数据链路层.三个基本问题
- 数据中心气流管理的基础:密闭系统的比较
- 最短路常用的四种模板(poj1847)
- MYSQL增量备份和全量备份脚本
- 判断 iframe 是否加载完成的完美方法(转)
- 使用 Django + Wusgi + Nginx 部署 Django
- ROS 基础: 在同一个节点里订阅和发布消息
- python调用数据库存储过程_python调用MySql存储过程
- matlab输入变量 复数,Matlab带符号变量的复数运算及其画图问题
- 华为手机浏览器不支持PUT提交方式的解决方案
- turtle库的学习
- html字体加粗代码_9102年了,公众号还不会换字体?
- 常见物理性能测试仪器设备档案
- 教你使用Python实现新个税计算器!
- 谷歌SEO考虑富媒体文件
- 螺旋线的画法---matlab代码
- 素描小子跑酷html5游戏在线玩,体验Html5实现的在线素描及绘画设计
- php获取指定日期的节假日信息