stream流求和
1、泛型为Integer、Long、Double、BigDecimal求和Integer sum scores.stream().reduce(Integer::sum).orElse(0);Long sum scores.stream().reduce(Long::sum).orElse(0L);Double sum scores.stream().reduce(Double::sum).orElse(0.00);BigDecimal sum scores.stream().reduce(BigDecimal::add).orElse(BigDecimal.ZERO);2、泛型为实体类(对单个属性求和)Integer sum sales.stream().mapToInt(Sale::getOrderNum).sum();Long sum sales.stream().mapToLong(Sale::getOrderNum).sum();Double sum sales.stream().mapToDouble(Sale::getOrderNum).sum();BigDecimal sum sales.stream().map(Sale::getAppleSale).reduce(BigDecimal.ZERO, BigDecimal::add);3、分组求和YearNum yearNum1 new YearNum(2021, BigDecimal.valueOf(10)); ListYearNum years ListUtil.of(yearNum1, yearNum11, yearNum2, yearNum22); 方式一 MapInteger, BigDecimal numByYear years.stream() .collect(Collectors.groupingBy(YearNum::getYear, Collectors.reducing(BigDecimal.ZERO, YearNum::getNum, BigDecimal::add))); 方式二 先分组再map转换成BigDecimal再用reduce进行求和 MapInteger, BigDecimal numByYear2 years.stream().filter(Objects::nonNull).collect( Collectors.groupingBy(YearNum::getYear, Collectors.mapping(YearNum::getNum, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)))); 方式三 先分组再收集成list然后再map再求和 MapString, BigDecimal ageGroup years.stream().collect(Collectors.groupingBy(YearNum::getYear , Collectors.collectingAndThen(Collectors.toList() , x - x.stream().map(YearNum::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))));