更改forEach循环java 8中变量的值

更改forEach循环java 8中变量的值,java,java-8,Java,Java 8,为什么count++显示错误 错误: 在封闭范围中定义的局部变量必须是final或final 考虑到lambda本质上是匿名内部类的语法糖,lambda表达式中使用的变量必须是有效的final。查看此项了解更多详细信息。正如错误消息所解释的,您不能在lambda表达式中修改局部变量。如果你提到你正在尝试做什么,也许我们可以建议一个替代方案。例如,你可以使用AtomicInteger。谢谢,但我知道替代方案。我想知道为什么我们不能改变forEach的价值。在normal for each循环中,您

为什么
count++
显示错误

错误:

在封闭范围中定义的局部变量必须是final或final


考虑到lambda本质上是匿名内部类的语法糖,lambda表达式中使用的变量必须是有效的final。查看此项了解更多详细信息。

正如错误消息所解释的,您不能在lambda表达式中修改局部变量。如果你提到你正在尝试做什么,也许我们可以建议一个替代方案。例如,你可以使用
AtomicInteger
。谢谢,但我知道替代方案。我想知道为什么我们不能改变forEach的价值。在normal for each循环中,您通常可以重新排列代码,这样就不需要这样的变量。这只是一个示例,而不是实际问题。只有我想知道为什么lambda只允许有效的final变量。这意味着我们可以说这是lambda的限制或缺点,即使用的变量总是有效的final。我不认为它是lambda中的限制,因为它只是替换匿名的内部类,其中无法定义非final变量。这种行为在逻辑上是正确的。@ArihantJain,这种行为是由于Java语言处理闭包的方式造成的。这是乔恩·斯基特的回答
int count =0;
requestUserDto.getNodeIds().forEach(userNodeId->{
    count++; // this statement shows error
     // some another statements here
    }
});