Java中Stream流去除List重复元素的方法
作者:BirdMan98 发布时间:2023-09-04 04:50:33
标签:Java,Stream,元素
本文实例为大家分享了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


猜你喜欢
- Spring 中 Bean 的生命周期是当今最流行的 Java 开发框架之一,其强大的 Bean容器机制是其中的核心之一。Bean 是指在
- 简介String是我们最常用的一个类,和普通java类一样其对象会存在java堆中。但是String类有其特殊之处,可以通过new方法生成,
- 为Repository添加自定义方法一、为某个Repository添加自定义方法1、定义一个接口PersonDao,声明要添加的方法。pub
- 本文实例为大家分享了OpenGL绘制Bezier曲线的具体代码,供大家参考,具体内容如下项目要求:– 使用鼠标在屏幕中任意设置控制点,并生成
- 本文实例讲述了Java实现批量向mysql写入数据的方法。分享给大家供大家参考,具体如下:private static String use
- 效果图如下所示: 1、在Adapter中加入如下代码<pre style="background-color:#2
- 对开场白没兴趣?好吧,我们直接切入正题,下面介绍10个C#编程和Visual Studio IDE使用技巧。1、Environment.Ne
- 目的官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少。本文介绍如何在Spring Bo
- 概述 wsimport是jdk自带的命令,可以根据wsdl文档生成客户端中间代码,基于生成的代码编写客户端,可以省很多麻烦。先看两张截图:使
- 前言本文主要给大家介绍了关于Android如何实现移动小球和CircularReveal页面切换动画的相关内容,分享出来供大家参考学习,下面
- JAVA调用webservice,当你刚开始接触的时候你会觉得它是一个恶梦,特别是没有一个统一的标准实现,比起.net的那些几步
- 在Android的应用框架中,ActivityManagerService是非常重要的一个组件,尽管名字叫做ActivityManagerS
- Home键(小房子键)在键盘上映射的就是home键,这倒是很好记。Menu键用于打开菜单的按键,在键盘上映射的是F2键,PgUp键同样可以。
- 这里我们只介绍springboot2.0的session时间设置Duration转换字符串方式,默认为正,负以-开头,紧接着P,(字母不区分
- 关于用户token处理到的坑当采用前后台完全分离,以微服务架构的搭建时。在搭建微服务过程中,由于每个服务都是独立的应用,这样就会造成一个统一
- @EqualsAndHashCode注解@EqualsAndHashCode注解的作用就是自动实现model类的equals方法和hashc
- 本文实例讲述了Android编程实现禁止系统锁屏与解锁亮屏的方法。分享给大家供大家参考,具体如下:需求:某个时刻任务执行完毕,关闭屏幕,某时
- 场景在任何一个Form表单的操作页面或者数据台账的查询页面,基本都会看到一个清除的按钮,其功能就是用来清除我们需要抛弃的已经写入到控件内的数
- 本文实例讲述了java针对电话号码正则匹配的方法。分享给大家供大家参考。具体如下:public interface RegExpConst
- 参考:How to catch an Exception from a threadIs there a way to make Runna