一:泛型为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));