首页 > 其他分享 >Collectors中的groupingBy和reducing 细节问题

Collectors中的groupingBy和reducing 细节问题

时间:2024-07-04 10:54:57浏览次数:24  
标签:StatisticsVo groupingBy Collectors System vo vo1 vo2 reducing

stream流中对数据进行先分组在聚合,一般会想到使用groupingBy和reducing,但是reducing中的identity是只会初始化一次的,所以我们传参的时候传的是Object,不是XXX::new,在reducing的合并函数中我们不能返回vo1或者vo2,只能new一个对象

正确使用

Map<String, StatisticsVo> collect = statisticsVos.collect(Collectors.groupingBy(e -> e.getMaterialName(), Collectors.reducing(new RawMaterialStatisticsVo(), (vo1, vo2) -> {
            // TODO 这里必须返回一个新对象,而不是修改vo1
            // System.out.println(System.identityHashCode(vo1)); 
            // System.out.println(vo1);
            // System.out.println(vo2);
            // System.out.println("---------");
            return StatisticsVo.add(vo1, vo2);
        })));

实体中的add方法

public static StatisticsVo add(StatisticsVo vo1,StatisticsVo vo2) {
    StatisticsVo vo = new StatisticsVo();
    if(StrUtil.isEmpty(vo1.getMaterialName())){
        vo.setMaterialName(vo2.getMaterialName());
    }else {
        vo.setMaterialName(vo1.getMaterialName());
    }
    vo.setTotalAmount(NumberUtil.add(vo1.getTotalAmount(),vo2.getTotalAmount()));
    return vo;
}

参考: java-stream-groupby-and-reduce

标签:StatisticsVo,groupingBy,Collectors,System,vo,vo1,vo2,reducing
From: https://www.cnblogs.com/ntmd32/p/18283137

相关文章

  • stream( ).collect ( Collectors.groupingBy ( ) ) 的用法
    文章目录第一种解释1、基本用法2、指定值收集器3、多级分组4、常见应用场景和用处第二种解释1、基本语法2、示例3、更复杂的用法第一种解释Collectors.groupingBy是Java8引入的StreamAPI中的一个收集器(Collector),它用于将流(Stream)中的元素根据某个分类函数......
  • Collectors.toMap的暗坑与避免方式
    使用Java的stream中的Collectors可以很方便地做容器间的转换,可以少写很多代码。但是其中有暗含的坑需要注意和避免,本文探讨Collectors.toMap(JDK8版本)。Collectors.toMap可以将一个流转化成Map,常见于需要将List转换成Map以便于进一步操作的场景,比如在通过RPC接口获取一个返回结果......
  • Flink之状态编程 值状态(ValueState)列表状态(ListState)映射状态(MapState)归约状态(Reducin
    Flink之状态编程值状态(ValueState)列表状态(ListState)映射状态(MapState)归约状态(ReducingState)聚合状态(AggregatingState)广播状态(BroadcastState)Flink之状态编程一、按键分区状态(KeyedState)1.1、值状态(ValueState)1.1.1、定义1.1.2、使用案例1.2、列表状态(ListState)1.2.1......
  • Stream toList不能滥用以及与collect(Collectors.toList())的区别
    StreamtoList()返回的是只读List原则上不可修改,collect(Collectors.toList())默认返回的是ArrayList,可以增删改查1.背景在公司看到开发环境突然发现了UnsupportedOperationException报错,想到了不是自己throw的应该就是操作collection不当。发现的确是同事使用了类似stringL......
  • Reinforcement Learning in Energy Management: Optimizing Grid Operations and Redu
    1.背景介绍Reinforcementlearning(RL)isasubfieldofmachinelearningthatfocusesonhowagentsoughttotakeactionsinanenvironmentinordertomaximizesomenotionofcumulativereward.Inrecentyears,reinforcementlearninghasbeenappliedtoawid......
  • Java 通过collectors.groupingBy根据某个字段统计
    要使用Collectors.groupingBy根据某个字段统计,你可以通过提供一个函数来指定分组的条件。假设你有一个包含Person对象的列表,每个对象都有age字段表示年龄,你想要根据年龄分组,并统计每个年龄组的人数。以下是一个使用Collectors.groupingBy的示例代码:importjava.util.Arrays;imp......
  • Java 使用`Collectors.groupingBy`计算百分比
    要使用Collectors.groupingBy计算百分比,你需要先对数据进行分组,然后计算每个组内元素的百分比。假设你有一个包含整数的列表,你想要按照它们的奇偶性进行分组,并计算每个组内元素的百分比。以下是一个使用Collectors.groupingBy和自定义收集器的示例代码:importjava.util.Arrays;......
  • Android官方资料--Reducing OTA Size
    ReducingOTASizeINTHISDOCUMENTThebuilddifftoolChangestoreduceOTAsizeFileOrderBuildDirectoryTimestampsVersionStringsConsistentbuildtoolsAcommonproblemwithAndroidover-the-airupdates(OTAs)isthattheycontainchangedfilesthatdo......
  • Stream - Collectors.groupingBy实现分组后,且每个分组也进行排序
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Stream-实现分组后,且每个分组也进行排序前言一、groupingBy高级用法二、先分组,再排序总结 前言之前记录过:stream的三个常用方式(toMap,groupingBy,findFirst)。这里继续记录下groupingBy的几个高......
  • 使用Java8 Stream流中的Collectors.collectingAndThen()方法去重
    https://blog.csdn.net/qq_40474184/article/details/122043378Stream流的常用方法大全https://blog.csdn.net/weixin_52317961/article/details/128117727......