使用lambda表达式分别 根据 单个字段、多个字段,分组求和

示意图:

1、根据 单个字段,分组求和:根据2019这个字段,计算一个list集合里,同属于2019的某个字段累加和

2、根据 多个字段,分组求和:

  (1)先根据2019这个字段,再根据1这个字段,计算一个list集合里,同属于2019和1的某个字段累加和;

  (2)先根据2019这个字段,再根据2这个字段,计算一个list集合里,同属于2019和2的某个字段累加和;

代码如下:

import com.pojo.DataStatisticsResultMiddle;
import java.util.ArrayList;
import java.util.List;
import java.util.LongSummaryStatistics;
import java.util.Map;
import java.util.stream.Collectors; public class Test { public static void main(String[] args) { List<DataStatisticsResultMiddle> li = new ArrayList<>();
DataStatisticsResultMiddle middle1 = new DataStatisticsResultMiddle();
middle1.setDatas("2019");
middle1.setCarrierid("1");
middle1.setEnusers(100L);
DataStatisticsResultMiddle middle2 = new DataStatisticsResultMiddle();
middle2.setDatas("2019");
middle2.setCarrierid("1");
middle2.setEnusers(150L);
DataStatisticsResultMiddle middle3 = new DataStatisticsResultMiddle();
middle3.setDatas("2019");
middle3.setCarrierid("1");
middle3.setEnusers(200L); DataStatisticsResultMiddle middle4 = new DataStatisticsResultMiddle();
middle4.setDatas("2019");
middle4.setCarrierid("2");
middle4.setEnusers(400L);
DataStatisticsResultMiddle middle5 = new DataStatisticsResultMiddle();
middle5.setDatas("2019");
middle5.setCarrierid("2");
middle5.setEnusers(500L);
DataStatisticsResultMiddle middle6 = new DataStatisticsResultMiddle();
middle6.setDatas("2019");
middle6.setCarrierid("2");
middle6.setEnusers(600L); li.add(middle1);
li.add(middle2);
li.add(middle3);
li.add(middle4);
li.add(middle5);
li.add(middle6); //单个字段,分组求和(datas)
Map<String, LongSummaryStatistics> enusersCollect1 =
li.stream().collect(Collectors.groupingBy(DataStatisticsResultMiddle:: getDatas, Collectors.summarizingLong(DataStatisticsResultMiddle :: getEnusers)));
LongSummaryStatistics enusers = enusersCollect1.get("2019");
System.out.println(enusers.getSum()); System.out.println("分割线***********************************"); //多个字段,分组求和(先按datas分组,再按Carrierid分组,求和)
Map<String, Map<String, LongSummaryStatistics>> enusersCollect2 =
li.stream().collect(Collectors.groupingBy(DataStatisticsResultMiddle:: getDatas,
Collectors.groupingBy(DataStatisticsResultMiddle:: getCarrierid,
Collectors.summarizingLong(DataStatisticsResultMiddle :: getEnusers))));
Map<String, LongSummaryStatistics> map = enusersCollect2.get("2019");
for(Map.Entry<String, LongSummaryStatistics> entry : map.entrySet()){
System.out.println(entry.getKey());
System.out.println(entry.getValue().getSum());
} } }

  

输出结果如下:

JDK8:Lambda根据 单个字段、多个字段,分组求和的更多相关文章

  1. jdk8 Lambda表达式与匿名内部类比较

    Labmda表达式与匿名内部类 前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖, ...

  2. row_number()over(partition by 字段 order by 字段)ID,修改重复行的字段值。

    案例分析: 现在要查询一个表单里面的运费结果,但是他还有分录,为了显示分录,必须把表头显示出来,问题是,他要查询运费的合计, 但是这样就会导致重复行也加进去了,这样显然数据不准,为此,可以把重复的行设 ...

  3. access数据库用sql语句添加字段,修改字段,删除字段

    用 Create Table 建立一个表 Table1 ,主键是自动编号字段,另一个字段是长度是 10 的文本字段. 代码如下:CREATE TABLE Table1 (Id COUNTER CONS ...

  4. Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、

    查询所有表名:select t.table_name from user_tables t;查询所有字段名:select t.column_name from user_col_comments t; ...

  5. MySQL添加字段和删除字段

    MySQL添加字段应该如何实现呢?这是很多刚刚接触MySQL数据库的新人都提到过的问题,下面就为您介绍MySQL添加字段和删除字段的方法,希望对您能有所启迪. MySQL添加字段: alter tab ...

  6. MySQL添加字段和修改字段的方法

    添加表字段 alter table table1 add transactor varchar(10) not Null; alter table   table1 add id int unsign ...

  7. openerp学习笔记 计算字段、关联字段(7.0中非计算字段、关联字段只读时无法修改保存的问题暂未解决)

    计算字段.关联字段,对象修改时自动变更保存(当 store=True 时),当 store=False 时,默认不支持过滤和分组7.0中非计算字段.关联字段只读时无法修改保存的问题暂未解决 示例代码: ...

  8. MySql增加字段、删除字段、修改字段

    MySql增加字段.删除字段.修改字段名称.修改字段类型   1.增加一个字段 alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; / ...

  9. oracle,如何查看视图结构,获得视图中的字段名称、字段类型、字段长度等。

    需要获得一个视图中的字段名称.字段类型.字段长度等信息,该如何编写sql语句.通过select * from user_views可以获得给定用户下所有的视图名称了,但是没找到如何获取视图结构的解决方 ...

随机推荐

  1. 分享一个批量修改文件编码的python脚本

    分享一个自己编写的递归查找子目录,将所有cpp文件编码修改为utf-8编码格式的小脚本 #i!/usr/bin/env python3 # -*- coding:utf-8 -*- import os ...

  2. 剑指Offer(十七):树的子结构

    剑指Offer(十七):树的子结构 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baidu_ ...

  3. javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.qingmu.Customer

    javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity pas ...

  4. iOS App开发那些事:如何选择合适的人、规范和框架?

    http://www.cocoachina.com/ios/20141202/10386.html 自从做Team Leader之后,身上权责发生了变化,于是让我烦恼的不再是具体某个功能,某个界面的实 ...

  5. 8259A的初始化(单片)

    1.单片8259A的初始化流程图: 在单片的初始化中不需要ICW3,因为ICW3是指明主片和从片的连接情况的. 2.程序解析: (1)ICW1 MOV AL,13H (2)ICW2 MOV AL,08 ...

  6. 13--网页,网站,微信公众号基础入门(PHP获取网页的get请求)

    https://www.cnblogs.com/yangfengwu/p/11148976.html 大家在访问网页的时候有没有注意一件事情 现在咱来看这种哈 现在咱做个功能哈,类似于这样 长话短说 ...

  7. shell脚本获取传入参数的个数

    ts.sh #!/bin/bash echo $# 输出 [root@redhat6 ~]# ./ts.sh para1 [root@redhat6 ~]# ./ts.sh para1 para2 [ ...

  8. 3D中的相机 - 投影矩阵和视图矩阵

    3D中的相机 - 投影矩阵和视图矩阵 3d游戏中,一般通过相机的设置来计算投影矩阵和视图矩阵,比如untiy和cocos,一般情况下我们不用关注如何计算, 可以直接在可视化的编辑器中调整参数就可以了, ...

  9. js截取get参数乱码问题之解决

    举个例子说一下: http://wwww.yctech.com/blog/post?id=1 像这样的话,通常通过如下代码直接截取不用做任何处理: function getQueryString(na ...

  10. FZU Monthly-201905 tutorial

    FZU Monthly-201905 tutorial 题目(难度递增) easy easy-medium medium medium-hard hard 思维难度 AB H DG CE F A. C ...