java8利用lambda表达式对数组进行分组求和,求最大值,平均值

```java
//获取数据,得到的数组中必须是一个实体对象,不能是map
List<ZZ500ETFVoucherData> list = zz500ETFVoucherMapper.getVoucherData(busiDate);
//根据sercuId分组,一个sercuId对应多个对象
Map<String, List<ZZ500ETFVoucherData>> groupByMap = etfList.stream().collect(Collectors.groupingBy(list -> list.getSecuId()));
//用来装最后分组之后的结果集
List<Map<String, String>> qtyList = new ArrayList<Map<String, String>>();
//循环上面得到的map对象,计算每一个key对应的value数组的统计值
groupByMap.forEach((k, kList) -> {
	//得到一个DoubleSummaryStatistics对象,里面包含dcompQty字段的各种统计值;如果是int类型或者是long类型,需要修改对应的对象
    DoubleSummaryStatistics qtySummary = kList.stream().collect(Collectors.summarizingDouble(e -> Double.valueOf(e.getDcompQty())));
    Map<String, String> qtyMap = new HashMap<>();
    qtyMap.put("SECUID", k);
    qtyMap.put("MAXNUM", String.valueOf(qtySummary.getMax()));//根据sercuId分组后dcompQty的最大值
  	qtyMap.put("MINNUM", String.valueOf(qtySummary.getMin()));//根据sercuId分组后dcompQty的最小值
	qtyMap.put("SUMNUM", String.valueOf(qtySummary.getSum()));//根据sercuId分组后dcompQty的和值
	qtyMap.put("AVGNUM", String.valueOf(qtySummary.getAverage()));//根据sercuId分组后dcompQty的平均值
	qtyMap.put("COUNTNUM", String.valueOf(qtySummary.getCount()));//根据sercuId分组后dcompQty的个
    qtyList.add(qtyMap);
});

多个字段合并进行统计

List<UndueReverseRepoData> resultList = new ArrayList<UndueReverseRepoData>();
    //多个字段共同分组,并对结果集进行分组求和
    Map<String, List<UndueReverseRepoData>> resultMap = resultList.stream().collect(Collectors.groupingBy(undueReverseRepo ->
       undueReverseRepo.getMarketCode() +"#"+ undueReverseRepo.getFundcode() +"#"+ undueReverseRepo.getFundname() +"#"+ undueReverseRepo.getSettlcurramt2()
    ));
    List<UndueReverseRepoData> result = new ArrayList<>();
    resultMap.forEach((k, kList) ->{
        UndueReverseRepoData nmap = new UndueReverseRepoData();
        DoubleSummaryStatistics sumcc = kList.stream().collect(Collectors.summarizingDouble(e->Double.valueOf(e.getAmt())));
        nmap.setMarketCode(kList.get(0).getMarketCode());
        nmap.setFundcode(kList.get(0).getFundcode());
        nmap.setFundname(kList.get(0).getFundname());
        nmap.setAmt(String.valueOf(sumcc.getSum()));
        nmap.setSettlcurramt2(kList.get(0).getSettlcurramt2());
        
    });

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值