在迭代HashMap时引用局部变量 - >从lambda表达式引用的局部变量必须是最终的或有效的最终错误

时间:2017-05-20 11:45:24

标签: java variables lambda

今天我想做一些我想完成的项目,我得到一个异常,我无法从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;
            }

    });

}

当它完成时我想要读出布尔值,需要知道他是否能够找到它 established = false; 我怎么能在这个lambda中成立,还是有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以在lambda中使用基元的原子变体。取代

boolean founded = true

由此

final AtomicBoolean found = new AtomicBoolean(false);

并将其设置在lambda中,如此

found.set(true);

顺便说一下,绝对不能用lambda替换每次迭代。在某些情况下,for循环仍然有效并且优于lambdas。

我已将成立更改为找到,正如Tom在您的问题评论中指出的那样。此外,您应该验证是否要与==进行比较而不是equals