Java 迭代HashMap时引用局部变量->;从lambda表达式引用的局部变量必须是final或有效的final error
今天我想做一些我想完成的项目,我得到一个异常,我不能从lambda表达式引用局部变量。 我有一个方法,其中我给出两个值,th方法检查值对是否已经在HashMap中Java 迭代HashMap时引用局部变量->;从lambda表达式引用的局部变量必须是final或有效的final error,java,variables,lambda,Java,Variables,Lambda,今天我想做一些我想完成的项目,我得到一个异常,我不能从lambda表达式引用局部变量。 我有一个方法,其中我给出两个值,th方法检查值对是否已经在HashMap中 public void METHOD_NAME(Value value1, Value value2) { boolean founded = false; //values is the name of the HashMap this.values.forEach((value1Map, value2Map)
public void METHOD_NAME(Value value1, Value value2) {
boolean founded = false;
//values is the name of the HashMap
this.values.forEach((value1Map, value2Map) -> {
if(value1Map == value1&&value2Map == value2){
this.doSomeStuff();
founded = true;
}
});
}
当它完成时,我想读出布尔值,想知道他是否找到了它
成立=假;
如何在此lambda中设置基元,或者是否有其他方法可以执行此操作?您可以在lambda中使用基元的原子变体。替换
boolean founded = true
由此
final AtomicBoolean found = new AtomicBoolean(false);
像这样把它放在你的lambda里
found.set(true);
顺便说一句,不使用lambda替换每个迭代是完全可以的。for循环仍然有效,并且在某些情况下比lambdas具有优势
正如汤姆在你问题的评论中所指出的那样,我已改为发现。此外,您应该验证是否要与
=
而不是equals进行比较,您可以在lambdas中使用原语的原子变体。替换
boolean founded = true
由此
final AtomicBoolean found = new AtomicBoolean(false);
像这样把它放在你的lambda里
found.set(true);
顺便说一句,不使用lambda替换每个迭代是完全可以的。for循环仍然有效,并且在某些情况下比lambdas具有优势
正如汤姆在你问题的评论中所指出的那样,我已改为发现。此外,您应该验证是否要与=
而不是equals
find->found进行比较。。。“成立”有不同的含义。应该有帮助。查找->找到。。。“成立”有不同的含义。应该会有帮助。首先感谢你的快速回答,现在可以了。谢谢;)我使用lambda是因为我认为使用它通过HashMap进行迭代似乎更容易。在您的例子中,我更喜欢for循环,因为AtomicBoolean是一种变通方法,而且除了forEach之外,您不调用流API的任何其他方法。最终这是个人喜好。考虑把我的答案标记为已接受的解决方案。谢谢首先谢谢你的快速回答现在可以用了谢谢;)我使用lambda是因为我认为使用它通过HashMap进行迭代似乎更容易。在您的例子中,我更喜欢for循环,因为AtomicBoolean是一种变通方法,而且除了forEach之外,您不调用流API的任何其他方法。最终这是个人喜好。考虑把我的答案标记为已接受的解决方案。谢谢