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);

    }

}

效果

Java中Stream流去除List重复元素的方法

来源:https://blog.csdn.net/weixin_41405524/article/details/120717488

标签:Java,Stream,元素
0
投稿

猜你喜欢

  • Android仿外卖购物车功能

    2023-06-01 02:45:26
  • C# 计算DataTime的4种时间差的方法(相差天数、相差小时、相差分钟、相差秒)

    2022-12-08 10:37:07
  • C#通过指针读取文件的方法

    2023-02-21 03:08:10
  • Android应用中实现手势控制图片缩放的完全攻略

    2023-11-25 16:25:09
  • Spring如何使用xml创建bean对象

    2023-10-24 08:53:56
  • Struts和servlet不能共存问题解决方法

    2022-09-20 07:26:59
  • 一问详解SpringBoot配置文件优先级

    2023-01-08 05:40:14
  • mybatis-plus QueryWrapper 添加limit方式

    2022-12-09 02:08:11
  • 超简单C#获取带汉字的字符串真实长度(单个英文长度为1,单个中文长度为2)

    2021-11-13 20:37:55
  • Android开发 旋转屏幕导致Activity重建解决方法

    2022-03-02 06:00:23
  • 简单了解Java方法的定义和使用实现

    2021-11-07 06:12:53
  • Java性能调优概述

    2023-07-06 05:42:51
  • 一篇文章告诉你JAVA Mybatis框架的核心原理到底有多重要

    2023-11-13 06:20:10
  • 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
  • SpringBoot配置log4j输出日志的案例讲解

    2023-07-30 18:54:50
  • java shiro实现退出登陆清空缓存

    2023-06-18 16:10:39
  • asp之家 软件编程 m.aspxhome.com