Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迭代HashMap时引用局部变量->;从lambda表达式引用的局部变量必须是final或有效的final error_Java_Variables_Lambda - Fatal编程技术网

Java 迭代HashMap时引用局部变量->;从lambda表达式引用的局部变量必须是final或有效的final error

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)

今天我想做一些我想完成的项目,我得到一个异常,我不能从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) -> {
            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的任何其他方法。最终这是个人喜好。考虑把我的答案标记为已接受的解决方案。谢谢