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);
});

本文链接http://element-ui.cn/news/show-2219.aspx