从Java 8 forEach循环返回一个值

Pun*_*cky 0 java java-8

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

public boolean find(){

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

    return false;
}
Run Code Online (Sandbox Code Playgroud)

编译错误

Iterable类型中的forEach(Consumer)方法不适用于参数((obj) - > {})

Jas*_* Hu 11

我想你想这样做:

public boolean find(){
    return someObjects.stream().anyMatch(o -> your_condition);
}
Run Code Online (Sandbox Code Playgroud)

  • @DawoodibnKareem我假设OP想要功能风格的东西.从他的分数来看,他应该知道如何以老式的方式做到这一点. (3认同)
  • @DidierL 我完全同意你的看法。现实生活中的软件实践将像这样的微性能放在优先级队列的最后面。有很多论据反对这种说法。 (2认同)
  • @DawoodibnKareem 考虑到用流实现的所有内容都可以重写,按照你的逻辑,你永远不应该使用流。 (2认同)

pab*_*han 6

forEach在方法Collection 需要一个Consumer,这意味着一个函数,它的值,但不返回任何东西.这就是为什么你不能使用,return true;return;工作正常.

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

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

return false;
Run Code Online (Sandbox Code Playgroud)