java lambda 累加,JDK8:Lambda根据 单个字段、多个字段,分组求和

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

示意图:

6c7528e4233bc3558c8cb5152c332c1d.png

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 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 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> enusersCollect2 =

li.stream().collect(Collectors.groupingBy(DataStatisticsResultMiddle:: getDatas,

Collectors.groupingBy(DataStatisticsResultMiddle:: getCarrierid,

Collectors.summarizingLong(DataStatisticsResultMiddle :: getEnusers))));

Map map = enusersCollect2.get("2019");

for(Map.Entry entry : map.entrySet()){

System.out.println(entry.getKey());

System.out.println(entry.getValue().getSum());

}

}

}

输出结果如下:

bc92dc08ca9670cb51ea211610d1d0f7.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值