java8 Stream分组求和 reducing_stream reducing-程序员宅基地

技术标签: java  java8新特性  

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());
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Guo_jee/article/details/123807115

智能推荐

HTML的实体符号_html 实体富豪_wwz1的博客-程序员宅基地

HTML的实体符号<!doctype html><html> <head> <title>HTML的实体符号</title> </head> <body> b<a>c <!-- 实体符号特点是:以&开始,以;结束。&lt; 是小于号 &gt; 是大于号 --> b&lt;a&gt;c abc _html 实体富豪

IDC中国数字金融论坛|中电金信分享“源启+应用重构”新范式-程序员宅基地

真的哭死投了上千简历,有四个小公司面试,因为都是线下,只去了一个还没有过。总体感觉面的很舒服,面试官没有为难我,但是主要是被捞的心里有点空落落的,担没心是KPI,所以反问也没有问。挺简单的,半小时写完单选多选简答两个,容器内置find和std find区别,效率返回引用的格式,好处,注意的规则,使用场景编程多少两种方法实现string 小。#兆芯# 上海兆芯公司校招选人制度极其不公平这个公司一天安排一组进行面试,同一天的面试题全部一样,对前面面试的人极其不公平,后面面试的人提前都知道答案了,都做了。

【Android应用开发】 Android 崩溃日志 本地存储 与 远程保存-程序员宅基地

Android 本地保存崩溃日志 和 远程服务器保存崩溃日志信息

MongoDB 数据库操作命令-2-程序员宅基地

创建和使用数据库> use runoobswitched to db runoob查询当前使用的数据库> dbrunoob查看所有数据库> show dbsadmin 0.000GBlocal 0.000GB> 可以看到,我们刚创建的数据库 runoob 并不在数据库的列表中, 要显示它,我们需要向...

web.py的使用_webpy的使用示例-程序员宅基地

web.py是一个非常轻量级的python web framework。使用非常简单。1. 安装web.py:http://webpy.org/install.zh-cn2. 最简单的hello world example: 创建一个"code.py" file,代码是import weburls = ( '/', 'index')class index:_webpy的使用示例

【三】Java循环结构思维导图-程序员宅基地

知识章节参考:【三】Java循环结构_java循环结构思维导图

随便推点

SQLyog查询时中文显示为问号_sqlyog表述数据问号-程序员宅基地

首先到C:\Program Files\MySQL\MySQL Server 5.5\my.ini下将default-character-set设置为default-character-set=gbk然后将表的属性中的字符集设置为gbk最后将数据重新插入_sqlyog表述数据问号

Windows Shell 编程 第六章_clsid_shelllink-程序员宅基地

第六章 快捷方式的最短路径 Windows Shell允许存储任何对象的引用到系统范围内的任何地点。例如,当你从一个文件夹拖拽可执行程序到另一个文件夹时,鼠标自动改变形状给出除拷贝和移动文件之外的第三种选择。 除非你确定,否则可执行文件是不能拷贝或移动的,相反,每_clsid_shelllink

JAVA:IO流 之 处理流之Object流(4)-程序员宅基地

1. ObjectInputStream和ObjectOutputStream(1)要存储一个对象,只要把该对象的所有的成员变量都存储起来就能实现了。同时,我们只要读取了一个对象原来保存的所有成员变量的值,就等于读取到了一个对象。(2)ObjectInputStream和ObjectOutputStream流,就可以完成保存和读取对象成员变量取值的过程。(3)要读写或存储的对象必须要被序...

ROS:AMCL-程序员宅基地

软件包摘要amcl是机器人在2D中移动的概率定位系统。它实现了自适应(或KLD采样)蒙特卡罗定位方法,其使用粒子滤波器来针对已知的地图跟踪机器人的姿势。算法许多算法及其参数在本文中有详细描述。用户是建议检查有更多的细节。使用以下算法: sample_motion_model_odometry, beam_range_finder_model, likelihood_field_range_fin...

[POJ1637]Sightseeing tour 混合图欧拉回路 做题笔记_混合图中的欧拉回路-程序员宅基地

题目链接:http://poj.org/problem?id=1637 这题是混合图欧拉回路,可以用网络流来做。 自己还是太弱了,这里引用一下hzwer的思路 混合图欧拉回路 设点x的出度-入度为d[x] 对于无向图先任意定向,若任意x,d[x]非偶数则impossible d[x]/2即为连接每个点的边需要反向的数量 若d[x]/2>0 连S->T_混合图中的欧拉回路

React Native 从入门到原理-程序员宅基地

React Native 是最近非常火的一个话题,介绍如何利用 React Native 进行开发的文章和书籍多如牛毛,但面向入门水平并介绍它工作原理的文章却寥寥无几。本文分为两个部分:上半部分用通俗的语言解释了相关的名词,重点介绍 React Native 出现的背景和试图解决的问题。适合新手对 React Native 形成初步了解。(事实证明,女票能看懂这段)下半部分则通