使用Java8 Stream流中的Collectors.collectingAndThen()方法去重

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

Collectors.collectingAndThen() 根据对象属性进行去重操作
Collectors.collectingAndThen()方法属于java8 Stream流中的 java.util.stream.Collectors,此类实现了 java.util.stream.Collector接口,还提供了大量的方法对Stream流中的元素进行mapreduce 操作

在获取任务的时候,会出现id重复的状况,利用Collectors.collectingAndThen()进行去重,

List<YearTargetTypePo> allYearTargetTypePos = this.selectList(new EntityWrapper<YearTargetTypePo>()
                                                            .eq("SYFW", RangeEnum.all.getValue())
                                                            .or().eq("CJBMID", user.getDepartmentId()));
typePoList.addAll(allYearTargetTypePos);
//        去掉重复的任务
newList = typePoList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
                () -> new TreeSet<>(Comparator.comparing(YearTargetTypePo::getId))), ArrayList::new));


以上使用到了collectingAndThen()根据属性进行去重的操作,进行结果集的收集,收集到结果集之后再进行下一步的处理。在这个去重操作中还用到了toCollection、TreeSet两个操作。

public static<T,A,R,RR> Collector<T,A,RR> collectingAndThen(Collector<T,A,R> downstream,Function<R,RR> finisher)


看源码中需要传的参数有两个,第一个参数是Collector的子类,所以Collectors类中的大多数方法都能使用,比如:toList(),toSet(),toMap()等,当然也包括collectingAndThen()。第二个参数是一个Function函数,也是去重的关键,用到的ArrayList::new调用到了ArrayList的有参构造。Function函数是R apply(T t),在第一个参数downstream放在第二个参数Function函数的参数里面,将结果设置为t。对于toCollection是一个通用的方法,满足treeSet收集集合,再传入需要根据某个属性进行比较的比较器,就能达到去重的效果。


原文链接:

https://blog.csdn.net/qq_40474184/article/details/122043378文章来源地址https://www.toymoban.com/news/detail-706839.html

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

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

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

相关文章

  • Stream流中的Map方法

    在Java 8及以上的版本中, Stream 中的 map 方法可以用于对 Stream 中的每个元素应用一个函数,并将结果存储在一个新的 Stream 中。具体用法如下: 其中, mapFunction 是一个函数,接受一个元素类型为 T 的参数,并返回一个类型为 R 的结果。 map 方法返回一个新的 Stream 对象,其中

    2024年02月08日
    浏览(46)
  • Java stream流中peek用法详解

    在Java中,Stream是一种用于处理集合数据的强大工具。它提供了一种函数式编程的方式来对数据进行操作和转换。Stream中的 peek 方法是一种非终端操作,它允许你在流的每个元素上执行一个操作,而不会改变流的内容。 peek 方法的语法如下: 其中, action 是一个接收一个元素并

    2024年02月05日
    浏览(51)
  • Stream流中,根据对象去重+指定对象中的属性去重

    首先定义一个学生类: 在main方法中构造四个对象,其中第四个对象为重复对象,现在进行对象的去重、以及对象中某一属性的去重操作 一、根据对象去重: 以下代码写于main函数中: 运行结果如下,可以看到,stream流的distinct只是将对象去重,将相同的第三个和第四个对象

    2024年02月02日
    浏览(67)
  • Java8使用Stream流实现List列表简单使用

       目录 1.forEach() 2.filter(T - boolean) 3.findAny()和findFirst() 4.map(T - R) 和flatMap(T - stream) 5.distinct() 去重 6.limit(long n)和skip(long n)  7.anyMatch(T - boolean) 8.allMatch(T - boolean) 9.noneMatch(T - boolean) Java8提供了Stream(流)处理集合的关键抽象概念,Stream 使用一种类似用 SQL 语句从数据库查询数

    2023年04月27日
    浏览(92)
  • Java8-使用stream.sorted()对List排序

    1.流的定义 Stream 中文称为 “流”,通过将集合转换为这么一种叫做 “流” 的元素序列,通过声明性方式,能够对集合中的每个元素进行一系列并行或串行的操作! 如果流中的元素的类实现了 Comparable 接口,即有自己的排序规则,那么可以直接调用 sorted() 方法对元素进行排

    2024年02月16日
    浏览(57)
  • JAVA8中list.stream()的一些简单使用

    为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。 stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。 stream只能被使用一次,一旦遍历

    2024年02月03日
    浏览(46)
  • Java8特性,Stream流的使用,收集成为map集合

    Java 8引入了Stream API,这是Java集合操作的一个重大改进。Stream API提供了一种高效且易于使用的处理数据的方式。 Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。注意:Stream自己不会存储元素,它不会改变源对象,反而它的操作会返回一个全新的Strea

    2024年04月22日
    浏览(83)
  • JAVA07_Stream流中FindFirst方法查找元素第一个

    ①. Stream的findFirst方法在此流中查找第一个元素作为Optional,如果流中没有元素,findFirst返回空的Optional,如果findFirst选择的元素为null,它将抛出NullPointerException Optional findFirst() ②. findAny():返回流中的任意一个元素;如果流是空的,则返回空 对于串行流,输出的都是查找第一个元素 对于

    2024年02月12日
    浏览(46)
  • 【Java基础】Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)

    本篇主要说明在Java8及以上版本中,使用stream().filter()来过滤List对象,查找符合条件的集合。 集合对象以学生类(Student)为例,有学生的基本信息,包括:姓名,性别,年龄,身高,生日几项。 我的学生类代码如下: 下面来添加一些测试用的数据,代码如下: 添加过滤条件

    2024年02月12日
    浏览(68)
  • Java解决stream流Collectors.groupingBy 分组统计可能报空指针异常

    在使用stream流的Collectors.groupingBy做分组统计时(示例代码如下) 如果统计的字段userName有null值则会报如下错误 解决方法为在统计之前增加一个filter方法将null值事先过滤掉。代码如下:

    2024年02月04日
    浏览(65)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包