lambda 根据属性去重_lambda表达式不同对象根据对象某个属性去重

本文介绍了如何使用Java 8的lambda表达式来实现两个list对象的去重,具体包括通过User对象的id和Person对象的id进行去重,以及对list进行交集、并集、差集和去重并集的操作。此外,还展示了如何使用stream进行map排序、统计重复元素个数以及获取排序后的key和value集合。
摘要由CSDN通过智能技术生成

1.有时候有两个list对象,我们想要去重,比如:

List userList和ListpersonList

想通过User的id和Person的id进行去重,去掉userList中的User的id不等于personList中的Person的id的对象。

List userList= userList.stream()

.filter(user-> !personList.stream()

.map(person ->person.getId())

.collect(Collectors.toList())

.contains(user.getId()))

//  .filter(UniqueUtils.distinctByKey(person ->person.getId()))

//   .peek(person  -> person .setId(UUIDUtil.uuid()))

.collect(Collectors.toList());

2.list 交集/并集/差集/去重并集

//交集

List intersection = list1.stream().filter(item ->list2.contains(item)).collect(toList());

System.out.println("---得到交集 intersection---");

intersection.parallelStream().forEach(System.out :: println);//差集 (list1 - list2)

List reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(toList());

System.out.println("---得到差集 reduce1 (list1 - list2)---");

reduce1.parallelStream().forEach(System.out :: println);//差集 (list2 - list1)

List reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(toList());

System.out.println("---得到差集 reduce2 (list2 - list1)---");

reduce2.parallelStream().forEach(System.out :: println);//并集

List listAll =list1.parallelStream().collect(toList());

List listAll2 = list2.parallelStream().collect(toList());

listAll.addAll(listAll2);

System.out.println("---得到并集 listAll---");

listAll.parallelStream().forEach(System.out :: println);

// 去重并集

List listAllDistinct = listAll.stream().distinct().collect(toList());

System.out.println("---得到去重并集 listAllDistinct---");

listAllDistinct.parallelStream().forEach(System.out :: println);

System.out.println("---原来的List1---");

list1.parallelStream().forEach(System.out :: println);

System.out.println("---原来的List2---");

list2.parallelStream().forEach(System.out :: println);

3.stream初试,map排序,list去重,统计重复元素个数,获取map的key集合和value集合

//定义一个100元素的集合,包含A-Z

List list = new LinkedList<>();for (int i =0;i<100;i++){

list.add(String.valueOf((char)('A'+Math.random()*('Z'-'A'+1))));

}

System.out.println(list);//统计集合重复元素出现次数,并且去重返回hashmap

Map map =list.stream().

collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));

System.out.println(map);//由于hashmap无序,所以在排序放入LinkedHashMap里(key升序)

Map sortMap = new LinkedHashMap<>();

map.entrySet().stream().sorted(Map.Entry.comparingByKey()).

forEachOrdered(e->sortMap.put(e.getKey(), e.getValue()));

System.out.println(sortMap);//获取排序后map的key集合

List keys = new LinkedList<>();

sortMap.entrySet().stream().forEachOrdered(e->keys.add(e.getKey()));

System.out.println(keys);//获取排序后map的value集合

List values = new LinkedList<>();

sortMap.entrySet().stream().forEachOrdered(e->values.add(e.getValue()));

System.out.println(values);---------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值