一:泛型为Integer、Long、Double、BigDecimal
Integer sum = li.stream().reduce(Integer::sum).orElse(0);
Long sum = li.stream().reduce(Long::sum).orElse(0L);
Double sum = li.stream().reduce(Double::sum).orElse(0.00);
BigDecimal sum = li.stream().reduce(BigDecimal::add).orElse(new BigDecimal(0.00));
二:对象单属性求和
Integer sum = orders.stream().mapToInt(Order::getOrderNum).sum();
Long sum = orders.stream().mapToLong(Order::getOrderNum).sum();
Double sum = orders.stream().mapToDouble(Order::getOrderNum).sum();
BigDecimal sum = orders.stream().map(Order::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
三:对象多属性求和
1. 类型为BigDecimal
var result = orders.stream().reduce((x, y) -> new Order(x.getOrderNum().add(y.getOrderNum()),
x.getSales().add(y.getSales()), x.getAmount().add(y.getAmount())))
.orElse(new Order(BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO));
2. 类型为Integer、Long、Double(注:orElse中对应类型初始值)
var sale = orders.stream().reduce((x, y) -> new Order(x.getOrderNum() + y.getOrderNum(),
x.getSales() + y.getSales(), x.getAmount() + y.getAmount()))
.orElse(new Order(0.00, 0.00,0.00));