经常会遇到需要集合某个字段求和的场景,stream为此提供了遍历的方法
// list 为 List 类型
List voList = workloadOccupied.stream().map(BigDecimal::new).collect(Collectors.toList());
BigDecimal sum=voList.stream().reduce(BigDecimal.valueOf(0),BigDecimal::add);
Integer
int ageSum = preSalesTaskVos.stream().collect(Collectors.summingInt(PreSalesTaskVo::getPlanWorkTime)); int ageSum = preSalesTaskVos.stream().mapToInt().sum(PreSalesTaskVo::getPlanWorkTime);
BigDecimal
preSalesTaskVos=preSalesTaskVos.stream().filter(e->e.getPlanWorkTime()!=null).collect(Collectors.toList()); BigDecimal planTotalWorkTime = preSalesTaskVos.stream() // 将user对象的age取出来map为Bigdecimal .map(PreSalesTaskVo::getPlanWorkTime) // 使用reduce()聚合函数,实现累加器 .reduce(BigDecimal.ZERO,BigDecimal::add);
求和
BigDecimal result2 = userList.stream() // 将user对象的age取出来map为Bigdecimal .map(User::getAge) // 使用reduce()聚合函数,实现累加器 .reduce(BigDecimal.ZERO,BigDecimal::add);
过滤null
BigDecimal result2 = userList.stream() .filter(e->e.getAge()!=null) // 将user对象的age取出来map为Bigdecimal .map(User::getAge) // 使用reduce()聚合函数,实现累加器 .reduce(BigDecimal.ZERO,BigDecimal::add);