业务场景

在开发中我们常常需要过滤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 List Stream 去重相关推荐

  1. java steam 去重_Java中对List去重, Stream去重

    问题 当下互联网技术成熟,越来越多的趋向去中心化.分布式.流计算,使得很多以前在数据库侧做的事情放到了Java端.今天有人问道,如果数据库字段没有索引,那么应该如何根据该字段去重?大家都一致认为用Ja ...

  2. java steam 去重_Java中对List去重 Stream去重的解决方法

    问题 当下互联网技术成熟,越来越多的趋向去中心化.分布式.流计算,使得很多以前在数据库侧做的事情放到了Java端.今天有人问道,如果数据库字段没有索引,那么应该如何根据该字段去重?大家都一致认为用Ja ...

  3. Java 8 Stream.distinct() 列表去重示例

    Java 8 Stream.distinct() 示例 在这篇文章里,我们将提供Java8 Stream distinct()示例. distinct()返回由该流的不同元素组成的流.distinct ...

  4. java 8 stream()

    2019独角兽企业重金招聘Python工程师标准>>> 1. 流的基本概念 1.1 什么是流? 流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合. ...

  5. stream去重_重复数据如何处理?List集合去重的四种方式

    List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍.但是,有时候难免会遇到集合里的数据是重复的,需要进行去除. ...

  6. Java 8 Stream 流用法及语法

    Java 8 Stream 流用法 1.简介 Stream流 最全的用法 Stream 能用来干什么?用来处理集合,通过 使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据 ...

  7. java双重循环去重_java List去除重复数据实现

    作者:多纤果冻 blog.csdn.net/qq_37939251/article/details/90713643 注:参照的文章完成的是int类型去重. String 类型基本一致,我完成的dem ...

  8. stream去重_List stream 对象 属性去重

    单值去重不写了,记录对象去重 随手一个对象: @Data @AllArgsConstructor public class Milk { private Integer key; private St ...

  9. 通过stream去重_分享几种 Java8 中通过 Stream 对列表进行去重的方法

    几种列表去重的方法 在这里我来分享几种列表去重的方法,算是一次整理吧,如有纰漏,请不吝赐教.1. Stream 的distinct()方法 distinct()是Java8中 Stream 提供的方法 ...

最新文章

  1. linux查看oracle的sga设置,Oracle基础教程之设置系统全局区SGA命令
  2. python 的dict的append()?
  3. 漫谈SAP产品里页面上的Checkbox设计与实现系列之一
  4. 转 结构体中字节对齐问题(转载)
  5. [导入]关于阶乘的两个常见算法及一个相关面试题
  6. kotlin 初始化数组
  7. 《金色梦乡》金句摘抄(五)
  8. Android开发中调用系统窗口的方法
  9. maven java 结构_Maven标准目录结构介绍
  10. 说下我常用的几个精简版系统的感受
  11. hping 详解_HPing3构造多种类型DDOS攻击使用详解
  12. python3 多线程爬去mzitu图片
  13. AI智能合同审阅系统
  14. [shell编程] 入门基础总结 (一) (一种豁然开朗的感觉)
  15. 【CLion】新手使用之编译运行单个文件
  16. opc服务器变量为空,OPC客户机上浏览不到OPC服务器上的变量
  17. java log4j详解_log4j详解
  18. 项目实战:小米商城官网及秒杀高仿(html+css+js)
  19. 外贸独立站之Facebook广告
  20. PYTHON 类的三大特性

热门文章

  1. mongodb批量插入数据脚本
  2. 为什么互联网+只有一个+?而C++是两个+?
  3. 基于Nastran的能量有限元方法(EFEA)介绍
  4. Android中list常用方法,Android中ListActivity用法实例分析
  5. 小米手环3nfc和4nfc哪个好_小米手环4nfc对比手环3nfc,以及使用过的荣耀和iwatch4对比...
  6. 名片管理系统python详解_公司起名_公司测名_公司名称大全
  7. 氨基酸分子结构和原子命名
  8. 惊艳!今年ChinaJoy上360旗下这两款智能硬件吸睛无数
  9. JAVA拾遗 — JMH与8个测试陷阱
  10. 【C/C++动态内存 or 柔性数组】——对动态内存分配以及柔性数组的概念进行详细解读(张三 or 李四)