从Java 8 forEach循环返回一个值

时间:2017-10-29 21:51:08

标签: java java-8

在下面的示例中,someObjects是一个集合。如果条件在循环内匹配,我试图返回true,但是这似乎没有编译。但是,当我只是添加"返回"它运作正常。我需要解决的问题是什么?

public boolean find(){

    someObjects.forEach(obj -> {
       if (some_condition_met) {
          return true;
       }
    });

    return false;
}

编译错误

  

类型中的每个(消费者)方法   Iterable不适用于参数((   obj) - > {})

3 个答案:

答案 0 :(得分:9)

我想你想这样做:

public boolean find(){
    return someObjects.stream().anyMatch(o -> your_condition);
}

答案 1 :(得分:6)

forEach中的Collection方法需要Consumer,这意味着一个函数会获取值,但不会返回任何内容。这就是为什么你不能使用return true;return;工作正常的原因。

我想在条件满足时突破循环,最好使用简单的for(...)循环。我假设obj的类型是Object

for (Object obj : someObjects) {
  if (some_condition_met) {
    return true;
  }
}

return false;

答案 2 :(得分:3)

forEach接受Consumer因此您无法传递不返回 void 的行为。你需要做类似的事情:

return someObjects.stream().anyMatch(e -> condition);