如何在Lambda表达式中对BigDecimal进行累加?

如何在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);