我正在尝试从 pojo 创建一个 getValue()
函数,在这个意义上使用细节类值的汇总:
@Transient
public BigDecimal getValue() {
BigDecimal sum = new BigDecimal(0);
details.stream().forEach((detail) -> {
sum = sum.add(detail.getValue());
});
return sum;
}
但我不知道为什么这行 sum = sum.add(detail.getValue());
会引发此错误:
local variables referenced from a lambda expression must be final or effectively final
你能告诉我我做错了什么吗?谢谢。
最佳答案
您不能从 lambda 内部修改变量。那不是你被允许做的事情。
你可以在这里做的是把这个方法写成
return details.stream()
.map(Detail::getValue)
.reduce(BigDecimal.ZERO, BigDecimal::add);
关于java - 从 lambda 表达式引用的局部变量必须是最终的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40493738/