java - 从 lambda 表达式引用的局部变量必须是最终的

标签 java

我正在尝试从 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/

相关文章:

java - 如何迭代不同对象的arraylist

java - 元音检查 - 数组越界错误

java - 如何使用netbeans验证java swing浮点值最多两个字段中的jtextfield

java - UniVocity 如何向自定义 validator 添加参数

java - JDK版本更新,现在找不到 Karate 测试

java - 带注释的 Spring + Hibernate : No Hibernate Session bound to thread

java - 将日期 2/24 格式化为 "February, 24"

java - jasypt:加密时强制相同的结果

java - 使用 Java 的独立 intelliJ 代码检查

java - 如何将 TextWatcher 添加到多个编辑文本