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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值