java8 Stream分组求和 reducing

reducing简介
reducing 是一个收集器(操作),从字面意义上可以理解为“减少操作”:输入多个元素,在一定的操作后,元素减少。

reducing 有多个重载方法,其中一个方法如下:

public static <T> Collector<T,?,Optional<T>> reducing(BinaryOperator<T> op)

以上方法,JDK对其的描述是:

Returns a Collector which performs a reduction of its input elements
under a specified BinaryOperator. The result is described as an
Optional. (返回一个收集器,该收集器在指定的二进制操作符下执行其输入元素的减少。结果被描述为可选的 。)

 List<Map<String, Object>> result = new ArrayList<>();
 //1
 Map<String, BigDecimal> collect= result.stream().collect(Collectors.groupingBy(x->x.get("dev").toString(),
                Collectors.reducing(BigDecimal.ZERO,
                        t->(BigDecimal)t.get("price"), (v1, v2) -> v1.add(v2))));
 //2
 Map<String, BigDecimal> collect2= result.stream().collect(Collectors.groupingBy(x->x.get("dev").toString(),
                Collectors.reducing(BigDecimal.ZERO,
                        t->(BigDecimal)t.get("price"), BigDecimal::add)));

其他参考

  //4
        Map<String, Double> collect4= result.stream().collect(Collectors.groupingBy(x->x.get("dev").toString(),
                Collectors.summingDouble(x-> (double) x.get("price"))));

        //5
        Map<String, DoubleSummaryStatistics> collect5= result.stream().collect(Collectors.groupingBy(x->x.get("dev").toString(),
                Collectors.summarizingDouble(x-> (double) x.get("price"))));
        System.out.println("price:"+collect5.get("collect4"));
        //DoubleSummaryStatistics 
        //getSum()——获取和
        //getMax()——获取最大值
        //getMin()——获取最小值
        //getAverage()——获取平均值
        //getCount()——获取数据量
        System.out.println("price:"+collect5.get("collect4").getSum());
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[3\]中提供了一种使用Java 8 Stream进行分组求和的方法。可以使用Collectors.groupingBy()方法将列表按照某个属性进行分组,然后使用Collectors.summingDouble()方法对每个分组进行求和。下面是一个示例代码: ```java Map<String, Double> collect = list.stream() .collect(Collectors.groupingBy(TestVO::getName, Collectors.summingDouble(TestVO::getAge))); System.out.println(collect); ``` 这段代码将根据TestVO对象的name属性对列表进行分组,并对每个分组的age属性进行求和。最后,将分组求和结果存储在一个Map中。你可以根据自己的需求修改属性名和数据类型。 #### 引用[.reference_title] - *1* *2* [java8 stream 过滤、排序、求和分组、去重等方法使用和说明](https://blog.csdn.net/qq_44293888/article/details/107868055)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [java8 Stream分组求和 reducing](https://blog.csdn.net/Guo_jee/article/details/123807115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值