Java中Stream流去除List重复元素的方法
作者:BirdMan98 时间:2023-09-04 04:50:33
本文实例为大家分享了Java中Stream流去除List重复元素的具体代码,供大家参考,具体内容如下
业务场景
在开发中我们常常需要过滤List中的重复对象,而重复的定义往往是根据单个条件或者多个条件,如果是单个条件的话还是比较好处理的,即使不使用工具,代码也可以很容易实现,但如果判断依据不是单个条件,而是多个条件的话,代码实现起来就会比较复杂,此时我们一般就会使用工具来简化开发
单条件去重代码
ArrayList<listData> collect = list.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(
listData::getId))), ArrayList::new));
解释
list-列表
listData-列表中存的对象
id是判断是否重复的条件,只保留唯一id对象
多条件去重代码
ArrayList<listData> collect = list.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(p->p.getPatentName() + ";" + p.getLevel()))), ArrayList::new));
测试代码
import java.util.*;
import java.util.stream.Collectors;
public class ExcelUtil {
private static String[] params = {"p001","p002","p003","p004"};
public static void main(String[] args) {
List<Datum> dataList = new ArrayList<>();
for (int i = 0; i < 100; i++) {
if (i%2==0){
Datum datum = new Datum(
params[new Random().nextInt(params.length)],
params[new Random().nextInt(params.length)],
params[new Random().nextInt(params.length)],
params[new Random().nextInt(params.length)],
params[new Random().nextInt(params.length)]
);
dataList.add(datum);
}
}
System.out.println("0 size : "+dataList.size()+" -> "+dataList);
// 单条件
ArrayList<Datum> collect1 = dataList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<Datum>(
Comparator.comparing(
Datum::getId))), ArrayList::new));
System.out.println("1 size : "+collect1.size()+" -> "+collect1);
// 两个条件
ArrayList<Datum> collect2 = dataList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(p->p.getId() + ";" + p.getAddress()))), ArrayList::new));
System.out.println("2 size : "+collect2.size()+" -> "+collect2);
// 三个条件
ArrayList<Datum> collect3 = dataList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(p->p.getInfo() + ";" + p.getAddress()+";"+p.getName()))), ArrayList::new));
System.out.println("3 size : "+collect3.size()+" -> "+collect3);
}
}
效果
来源:https://blog.csdn.net/weixin_41405524/article/details/120717488
标签:Java,Stream,元素
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android仿外卖购物车功能
2023-06-01 02:45:26
![](https://img.aspxhome.com/file/2023/9/137109_0s.gif)
C# 计算DataTime的4种时间差的方法(相差天数、相差小时、相差分钟、相差秒)
2022-12-08 10:37:07
C#通过指针读取文件的方法
2023-02-21 03:08:10
Android应用中实现手势控制图片缩放的完全攻略
2023-11-25 16:25:09
![](https://img.aspxhome.com/file/2023/6/138466_0s.jpg)
Spring如何使用xml创建bean对象
2023-10-24 08:53:56
![](https://img.aspxhome.com/file/2023/6/108456_0s.png)
Struts和servlet不能共存问题解决方法
2022-09-20 07:26:59
一问详解SpringBoot配置文件优先级
2023-01-08 05:40:14
![](https://img.aspxhome.com/file/2023/6/110886_0s.png)
mybatis-plus QueryWrapper 添加limit方式
2022-12-09 02:08:11
超简单C#获取带汉字的字符串真实长度(单个英文长度为1,单个中文长度为2)
2021-11-13 20:37:55
![](https://img.aspxhome.com/file/2023/0/104290_0s.png)
Android开发 旋转屏幕导致Activity重建解决方法
2022-03-02 06:00:23
简单了解Java方法的定义和使用实现
2021-11-07 06:12:53
![](https://img.aspxhome.com/file/2023/1/126351_0s.png)
Java性能调优概述
2023-07-06 05:42:51
一篇文章告诉你JAVA Mybatis框架的核心原理到底有多重要
2023-11-13 06:20:10
![](https://img.aspxhome.com/file/2023/5/59705_0s.png)
Java Socket使用加密协议进行传输对象的方法
2023-11-28 12:47:44
Mybatis 级联删除的实现
2022-05-08 21:18:09
java使用influxDB数据库的详细代码
2023-03-04 05:22:27
Java JDK 动态 代理的使用方法示例
2023-08-23 08:12:52
Android RadioGroup多行显示效果 解决单选问题
2023-05-28 18:23:55
![](https://img.aspxhome.com/file/2023/1/128991_0s.jpg)
SpringBoot配置log4j输出日志的案例讲解
2023-07-30 18:54:50
java shiro实现退出登陆清空缓存
2023-06-18 16:10:39