java8 stream lambda表达式
求和
BigDecimal求和
BigDecimal sumValue = valueList.stream().map(DataSource::getValue)
.reduce(BigDecimal.ZERO,BigDecimal::add);
或者
sum = list.stream().map(p -> p.getWeight())
.reduce(BigDecimal.ZERO, (b1, b2) -> b1.add(b2));
分组求和
Map<String, BigDecimal> sumByCorpMap = valueList.stream()
.collect(Collectors.groupingBy(DataSource::getBelongCorp,
Collectors.reducing(BigDecimal.ZERO,DataSource::getValue,BigDecimal::add)));
多字段分组求和
//多字段分组求和 先根据区域分组,再按分集团分组,求和
Map<String, Map<String, BigDecimal>> sumByAreaAndCorpMap = valueList.stream().collect(
Collectors.groupingBy(DataSource::getArea,
Collectors.groupingBy(DataSource::getBelongCorp,Collectors.
reducing(BigDecimal.ZERO,DataSource::getValue,BigDecimal::add))));