今天我想做一些我想完成的项目,但我得到一个异常,即我无法从 lambda 表达式引用局部变量。 我有一个方法,我给出两个值,该方法检查值对是否已经在 HashMap 中
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;
}
});
}
当它完成时,我想读出 boolean 值,需要知道他是否找到它 成立=假; 我怎样才能在这个 lambda 中设置Founded,或者还有其他方法可以做到这一点?
最佳答案
您可以在 lambda 中使用原语的原子变体。替换
boolean founded = true
按此
final AtomicBoolean found = new AtomicBoolean(false);
并将其设置在您的 lambda 中,如下所示
found.set(true);
顺便说一句,不用 lambda 替换每次迭代是绝对可以的。 for 循环仍然有效,并且在某些情况下比 lambda 具有优势。
正如 Tom 在您问题的评论中指出的那样,我已将 founded 更改为 found。此外,您应该验证是否要使用 ==
而不是 equals
关于java - 迭代 HashMap 时引用局部变量 -> 从 lambda 表达式引用的局部变量必须是最终的或有效的最终错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44085485/