我试图从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());
引发了这个错误:
从lambda表达式引用的局部变量必须是final或 有效的最终
你能告诉我我做错了什么吗?感谢。
答案 0 :(得分:8)
你无法修改lambda中的变量。这不是你被允许做的事情。
在这里做的是将此方法写为
return details.stream()
.map(Detail::getValue)
.reduce(BigDecimal.ZERO, BigDecimal::add);
答案 1 :(得分:2)
好的,只是不要在foreach循环中使用lambda表达式
@Transient
public BigDecimal getValue() {
BigDecimal sum = new BigDecimal(0);
for (Detail detail : details) {
sum = sum.add(detail.getValue());
}
return sum;
}
答案 2 :(得分:0)
这是我在循环中避免最终p的方法,并且它有效。
public void getSolutionInfo(){
ArrayList<Node> graph = Main.graph;
for(int p=1;p<=Pmax;p++) {
final int p2=p;
System.out.printf("number of node with priority p = %d is %d ",p, graph.stream().filter(node->node.getPriority()==p2).count());
}