如何在Lambda表达式中对BigDecimal进行累加?
今天在工作中需要用到foreach对订单金额Bigdecimal进行累加,查了很久都没查出结果;
// 已支付总金额
BigDecimal paidAmount = BigDecimal.ZERO;
orderList.stream()
.filter(OrderDO::getHasPaid)
.forEach(orderDO -> paidAmount.add(orderDO.getPaidAmount()));
上面这种做法paidAmount依然为0;
于是换一种做法,使用变量接收,但会报Variable used in lambda expression should be final or effectively final的编译错误;
解决方法是使用map-reduce进行缩紧;
// 已支付总金额
BigDecimal paidAmount = orderList.stream()
.filter(OrderDO::getHasPaid)
.map(OrderDO::getPaidAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);