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

标签 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;
            }

    });

}

当它完成时,我想读出 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/

相关文章:

java - 使用反射获取扩展 "Solid"类的所有类的列表

javascript - 当数据链接到变量时,d3js 不进行绘图

c# - 表达式树解析,变量最终成为常量

c# - 用于查找两个字符串数组之间是否存在任何匹配项的 LINQ 表达式

java - 当 Java Selenium 的代码片段中没有 "value"属性或文本时,如何将电子邮件/文本输入到字段中

java - 使用正则表达式查询 Android SQLite 数据库

java - javadoc 中的 -nodeprecated 选项似乎不起作用。我能做什么?

java - 访问函数内部的变量

variables - 从资源更新地形变量

c++ - 如何避免使用已知函数参数的 lambda 函数?