返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java 使用 Stream 去重
  • 412
分享到

Java 使用 Stream 去重

java 2023-08-18 09:08:27 412人浏览 安东尼
摘要

根据对象单个属性进行去重 在项目中可以会获取到一个集合,集合中有很多重复的数据,但是总感觉转成Set去重不太体面,那就可以试试使用 Stream 来实现根据对象的属性进行去重 将集合转为Stream流后通过Collectors.toM

根据对象单个属性进行去重

项目中可以会获取到一个集合,集合中有很多重复的数据,但是总感觉转成Set去重不太体面,那就可以试试使用 Stream 来实现根据对象的属性进行去重

将集合转为Stream流后通过Collectors.toMap 进行去重

  • UserEntity::getName 指定根据名字去重
  • user -> user 执行后要转换的类型(因为我们不需要转换所以不处理)
  • (u1, u2) -> u1) 然后存在多个时我们保留第一个对象
@Test    public void propertyDistinct(){        UserEntity a1 = new UserEntity().setId(1).setStatus(1).setName("A1");        UserEntity a2 = new UserEntity().setId(2).setStatus(2).setName("A2");        UserEntity a3 = new UserEntity().setId(3).setStatus(3).setName("A3");        UserEntity a4 = new UserEntity().setId(4).setStatus(4).setName("A1");        UserEntity a5 = new UserEntity().setId(5).setStatus(3).setName("A5");        UserEntity a6 = new UserEntity().setId(6).setStatus(2).setName("A3");        UserEntity a7 = new UserEntity().setId(7).setStatus(4).setName("A2");        List userList = Arrays.asList(a1, a2, a3, a4, a5, a6, a7);        List list = userList.stream()                .collect(Collectors.toMap(UserEntity::getName, user -> user, (u1, u2) -> u1))                .values()                .stream()                .collect(Collectors.toList());        list.forEach(System.out::println);    }实现结果:UserEntity(id=1, code=null, status=1, name=A1, sex=null, birthday=null, pingList=null)UserEntity(id=2, code=null, status=2, name=A2, sex=null, birthday=null, pingList=null)UserEntity(id=3, code=null, status=3, name=A3, sex=null, birthday=null, pingList=null)UserEntity(id=5, code=null, status=3, name=A5, sex=null, birthday=null, pingList=null)

根据对象多个属性进行去重

根据集合对象中的 Id+“-”+Name 进行去重

@Test    public void propertyDistinct(){        UserEntity a1 = new UserEntity().setId(1).setStatus(1).setName("A1");        UserEntity a2 = new UserEntity().setId(2).setStatus(2).setName("A2");        UserEntity a3 = new UserEntity().setId(3).setStatus(3).setName("A3");        UserEntity a4 = new UserEntity().setId(1).setStatus(4).setName("A1");        UserEntity a5 = new UserEntity().setId(5).setStatus(3).setName("A5");        UserEntity a6 = new UserEntity().setId(6).setStatus(2).setName("A3");        UserEntity a7 = new UserEntity().setId(7).setStatus(4).setName("A2");        List userList = Arrays.asList(a1, a2, a3, a4, a5, a6, a7);        List uniqueList = userList.stream()                .collect(Collectors.collectingAndThen(                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getId() + "-" + o.getName()))),                        ArrayList::new                ));        uniqueList.forEach(System.out::println); }实现结果:UserEntity(id=1, code=null, status=1, name=A1, sex=null, birthday=null, pingList=null)UserEntity(id=2, code=null, status=2, name=A2, sex=null, birthday=null, pingList=null)UserEntity(id=3, code=null, status=3, name=A3, sex=null, birthday=null, pingList=null)UserEntity(id=5, code=null, status=3, name=A5, sex=null, birthday=null, pingList=null)UserEntity(id=6, code=null, status=2, name=A3, sex=null, birthday=null, pingList=null)UserEntity(id=7, code=null, status=4, name=A2, sex=null, birthday=null, pingList=null)

根据对象所有属性进行去重

使用的 stream 的 distinct() 方法必须对象属性都相同

@Test    public void propertyDistinct(){        UserEntity a1 = new UserEntity().setId(1).setStatus(1).setName("A1");        UserEntity a2 = new UserEntity().setId(2).setStatus(2).setName("A2");        UserEntity a3 = new UserEntity().setId(3).setStatus(3).setName("A3");        UserEntity a4 = new UserEntity().setId(1).setStatus(1).setName("A1");        UserEntity a5 = new UserEntity().setId(5).setStatus(3).setName("A5");        UserEntity a6 = new UserEntity().setId(3).setStatus(3).setName("A3");        UserEntity a7 = new UserEntity().setId(7).setStatus(4).setName("A2");        List userList = Arrays.asList(a1, a2, a3, a4, a5, a6, a7);        List uniqueList = userList.stream().distinct().collect(Collectors.toList());        uniqueList.forEach(System.out::println);              }实现结果:UserEntity(id=1, code=null, status=1, name=A1, sex=null, birthday=null, pingList=null)UserEntity(id=2, code=null, status=2, name=A2, sex=null, birthday=null, pingList=null)UserEntity(id=3, code=null, status=3, name=A3, sex=null, birthday=null, pingList=null)UserEntity(id=5, code=null, status=3, name=A5, sex=null, birthday=null, pingList=null)UserEntity(id=7, code=null, status=4, name=A2, sex=null, birthday=null, pingList=null)

来源地址:https://blog.csdn.net/Agony921/article/details/131213616

--结束END--

本文标题: Java 使用 Stream 去重

本文链接: https://lsjlt.com/news/373844.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java 使用 Stream 去重
    根据对象单个属性进行去重 在项目中可以会获取到一个集合,集合中有很多重复的数据,但是总感觉转成Set去重不太体面,那就可以试试使用 Stream 来实现根据对象的属性进行去重 将集合转为Stream流后通过Collectors.toM...
    99+
    2023-08-18
    java
  • java Stream去重操作
     1.根据对象的某个属性去重: 网上找的stream流去重方法,可以根据类的某个属性去重,这里记录一下 public static Predicate distinctNotByKey(Function keyExtract...
    99+
    2023-09-01
    java python linux
  • Java中list集合stream流去重
    Java中list集合stream流去重 1. List单个字段去重 list.stream().distinct().collect(Collectors.toList()); 2. List对象...
    99+
    2023-09-15
    java jvm servlet
  • java stream去重的几种方式
    java stream去重的几种方式 使用 Stream 的 distinct() 方法使用 collectingAndThen() 和 toCollection() 方法使用 filter() 方法 使用 Stream 的 d...
    99+
    2023-08-22
    java
  • Java中Stream流去除List重复元素的方法
    本文实例为大家分享了Java中Stream流去除List重复元素的具体代码,供大家参考,具体内容如下 业务场景 在开发中我们常常需要过滤List中的重复对象,而重复的定义往往是根据单...
    99+
    2024-04-02
  • Java8怎么利用Stream实现列表去重
    这篇文章主要介绍“Java8怎么利用Stream实现列表去重”,在日常操作中,相信很多人在Java8怎么利用Stream实现列表去重问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java8怎么利用Stream...
    99+
    2023-06-30
  • Java8-Stream流操作List去重问题
    目录Java8Stream流操作List去重List列表运用Java8的stream流按某字段去重问题思路Java8Stream流操作List去重 根据属性去重整体去重使用 dist...
    99+
    2022-11-16
    Java8 Stream流 Java8 List去重 Java8 Stream List去重
  • 怎么使用Java Stream
    本篇内容主要讲解“怎么使用Java Stream”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java Stream”吧!Stream的特点如果你要用好Stream,你必须搞清楚它的特点...
    99+
    2023-06-15
  • Java8 Stream流根据多个字段去重
    目录Stream流根据多个字段去重Stream多字段去重,去重求和完整demo如下启动主函数Stream流根据多个字段去重 分组 list.stream().collect(Coll...
    99+
    2024-04-02
  • java中Stream怎么使用
    这篇文章将为大家详细讲解有关java中Stream怎么使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、使用流程Stream 的实例化一系列的中间操作(过滤、映射、...)终止操作2、注意点一个中间操...
    99+
    2023-06-15
  • 【Stream流】java中Stream流详细使用方法
    在Java中,Stream是一种用于处理集合数据的流式操作API。它提供了一种简洁、灵活、高效的方式来对集合进行各种操作,如过滤、映射、排序等。下面是一些Stream的常用功能和详细的代码示例: 创...
    99+
    2023-09-29
    java spring boot 后端 开发语言
  • Java8利用Stream实现列表去重的方法详解
    目录一. Stream 的distinct()方法1.1 对于 String 列表的去重1.2 对于实体类列表的去重二. 根据 List<Object> 中 Object...
    99+
    2024-04-02
  • Stream如何在java中使用
    Stream如何在java中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客...
    99+
    2023-06-14
  • Java 中如何使用 stream 流
    目录前言一、筛选和切片1.1、筛选 filter1.2、去重 distinct1.3、切片 limit1.4、跳过元素 skip1.5、排序 sorted1.6、小结与综合应用二、映...
    99+
    2024-04-02
  • java springcloud的Stream怎么使用
    本篇内容主要讲解“java springcloud的Stream怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java springcloud的Stream怎么使用”吧!Spring C...
    99+
    2023-06-05
  • Java的Stream流如何使用
    这篇文章主要介绍“Java的Stream流如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java的Stream流如何使用”文章能帮助大家解决问题。简介说明JDK8新增了Stream(流操作)...
    99+
    2023-06-30
  • 怎么使用stringbuilder去重
    使用StringBuilder去重的方法如下:1. 创建一个空的StringBuilder对象。2. 将需要去重的字符串转换为字符数...
    99+
    2023-08-15
    stringbuilder
  • Java集合Stream流如何使用
    这篇文章主要介绍“Java集合Stream流如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java集合Stream流如何使用”文章能帮助大家解决问题。Java 中可以使用 java.util...
    99+
    2023-07-05
  • Java去重排序之Comparable与Comparator怎么使用
    本文小编为大家详细介绍“Java去重排序之Comparable与Comparator怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java去重排序之Comparable与Comparator怎么使用”文章能帮助大家解决疑惑,下面跟...
    99+
    2023-07-05
  • Java数组的去重
    目录数组去重的场景1、ES6-set2、利用Map数据结构去重3、 嵌套循环+splice4、 forEach + indexOf总结数组去重的场景 将数组var arr =[1,1...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作