当前位置: 首页 > 知识库问答 >
问题:

迭代HashMap时引用局部变量->从lambda表达式引用的局部变量必须是final或实际上是final错误

孟跃
2023-03-14

今天我想做一些我想完成的项目,在那里我得到了一个异常,我不能从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;
            }

    });

}

当它结束时,我想读出布尔函数,需要知道他是否发现它成立= false我怎样才能在这个lambda中设置founded或者有没有其他方法可以做到这一点?

共有1个答案

朱保赫
2023-03-14

您可以在lambda中使用原语的原子变体。替换

boolean founded = true

这时

final AtomicBoolean found = new AtomicBoolean(false);

像这样把它放在你的lambda里

found.set(true);

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

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

 类似资料:
  • 我有一个JavaFX 8程序(用于JavaFXPorts交叉平台),几乎可以做我想做的事情,但又短了一步。该程序读取文本文件,对行进行计数以建立随机范围,从该范围中选取一个随机数,然后读取该行以进行显示。 我对java有点陌生,但似乎我是否使用Lambda在中显示下一个随机行,我的

  • 问题内容: 我有一个JavaFX 8程序(用于跨平台的JavaFXPorts),可以完成我想做的事情,但只差了一步。该程序读取一个文本文件,对行进行计数以建立一个随机范围,从该范围中选择一个随机数,然后读取该行以进行显示。 我对Java有点陌生,但是似乎我是否使用Lambda都不显示下一个随机行,我的行期望一个静态值。 有什么想法可以调整我必须在每次按下屏幕按钮时简单显示var readln2的下

  • 我正在尝试返回对象。 但我得到了 从内部类引用的局部变量必须是最终变量或实际上是最终变量 on < code > stats = statistics如何返回对象,但要确保< code >。close();是否正在运行?

  • 我正在尝试从pojo创建一个函数,该函数在以下意义上使用细节类值的求和: 但是不知道为什么这一行< code > sum = sum . add(detail . getvalue());引发此错误: 从lambda表达式引用的局部变量必须是final或有效final 你能告诉我我做错了什么吗?谢了。

  • 这个问题在这里已经有了答案: > 为什么匿名类只能访问最终变量? 为什么对于实例变量[重复]忽略“Lambda表达式中使用的变量必须是final或实际上是final”警告 “lambda在start方法参数被垃圾回收后才能运行”是什么意思? 为什么要复制?