Java 使用 Stream 去重

这篇具有很好参考价值的文章主要介绍了Java 使用 Stream 去重。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

在项目中可以会获取到一个集合,集合中有很多重复的数据,但是总感觉转成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<UserEntity> userList = Arrays.asList(a1, a2, a3, a4, a5, a6, a7);
        List<UserEntity> 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<UserEntity> userList = Arrays.asList(a1, a2, a3, a4, a5, a6, a7);

        List<UserEntity> 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() 方法必须对象属性都相同文章来源地址https://www.toymoban.com/news/detail-621711.html

	@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<UserEntity> userList = Arrays.asList(a1, a2, a3, a4, a5, a6, a7);

        List<UserEntity> 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)

到了这里,关于Java 使用 Stream 去重的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用java8 新特性stream流对List<Map<String, Object>>集合进行遍历、过滤、查询、去重、排序、分组

    对于一个ListMapString, Object类型的数据,可以使用Java 8的新特性stream流来进行遍历、过滤、查询、去重、排序、分组等操作。 遍历: 过滤: 查询: 去重: 排序: 分组:

    2024年02月10日
    浏览(65)
  • java stream distinct根据list某个字段去重

    java stream distinct根据list某个字段去重,普通List简单去重: 很显然这种满足不了需求,我们List里的是实体对象,这里的是字符串。 首先创建了一个Student类,该类包含id、name、age三个字段,使用了注解@Data,我们想根据学生的name去重。 一、Stream流 + TreeSet(推荐) 根据学生的

    2024年01月17日
    浏览(76)
  • java8 列表通过 stream流 根据对象属性去重的三种实现方法

    0、User对象 1、使用filter进行去重 测试 ①、疑惑 既然 filter 里面调用的是 distinctPredicate 方法,而该方法每次都 new 一个新的 map 对象,那么 map 就是新的,怎么能做到可以过滤呢 ②、解惑 先看一下 filter 的部分实现逻辑,他使用了函数式接口 Predicate ,每次调用filter时,会使用

    2024年01月20日
    浏览(95)
  • 【Stream流】java中Stream流详细使用方法

    在Java中, Stream 是一种用于处理集合数据的流式操作API。它提供了一种简洁、灵活、高效的方式来对集合进行各种操作,如过滤、映射、排序等。下面是一些 Stream 的常用功能和详细的代码示例: 创建流: 从集合创建流: stream() 方法可以从集合创建一个流。 从数组创建流:

    2024年02月07日
    浏览(52)
  • Java使用Stream流

    在实际的开发工作中,集合是我们非常常用的一种。 当我们想对集合内的对象加工时,你是不是首先想到了for循环? 其实在java8以后,引入的Stream流,同时搭配lambda的使用,可以支持一系列复杂的操作,使我们操作集合时更加方便的同时,也会使代码看起来更加简洁 假设我

    2024年02月16日
    浏览(33)
  • java中的stream基本使用

    Stream流把真正的函数式编程风格引入到Java中,而且代码特别简介。 1、获取Stream流 2、中间方法 3、终结方法 Collection体系集合 使用默认方法stream()生成流, default Stream stream() Map体系集合 把Map转成Set集合,间接的生成流 数组 通过Arrays中的静态方法stream生成流 同种数据类型的

    2024年02月15日
    浏览(34)
  • jdk8对象列表使用stream流基于某个字段(或某些条件)实现去重

    直接上代码:(实现了去重加排序的效果) comparing(比较器)定义的就是去重的所使用的字段,可以使用匿名内部类来写更复杂的去重逻辑。 我们看看单参数的比较器方法实现;如下,可以发现内部实际调用效果类似于(a,b)-a.getXXX.conpareTo(b.getXXX)。 因为Function.apply(field)实际上

    2024年02月11日
    浏览(45)
  • Java Stream API的基本使用方法

    Java各个版本所更新的主要内容: 1.Java SE 8:引入了一些新特性,如lambda表达式、Stream API、格式化日期、国际化等。此外,还对并发编程进行了改进,引入了线程安全的 Stream API 。 2.Java SE 9:新增了分布式架构的支持,引入了CompletableFuture、ZK等新特性。此外,还对Jit编译器进

    2024年02月03日
    浏览(45)
  • java stream flatMap的使用及个人理解

    1.我认为用简单朴素的理解和使用,是对工具最好的诠释。java jdk8开始提供了stream流,方便我更高效的操作集合和编写代码。其中flatmap流中间操作api,我认为简单来说是对“集合中的集合的操作和展开”。比如说,一个对象集合里面的每个对象还有个集合对象。这时,我们如

    2024年01月18日
    浏览(36)
  • JAVA中对list使用stream对某个字段求和

    对于List对象 或者ListMapString,integer等类型的数组,如何快速的求出list数组中某个对象的某个属性的和,平均数,统计数,最大值,最小值,等: 使用 XXXSummaryStatistics统计类实现: 运行结果如下: 相应的还有DoubleSummaryStatistics, LongSummaryStatistics

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包