Iterable上使用外部迭代时,我们使用增强型for-each循环中的breakreturn作为:

for (SomeObject obj : someObjects) {
   if (some_condition_met) {
      break; // or return obj
   }
}


我们如何breakreturn在Java 8 lambda表达式中使用内部迭代,例如:

someObjects.forEach(obj -> {
   //what to do here?
})

最佳答案

如果需要,则不应使用forEach,而应使用流中可用的其他方法之一。哪一个取决于您的目标是什么。

例如,如果此循环的目标是找到与某些谓词匹配的第一个元素:

Optional<SomeObject> result =
    someObjects.stream().filter(obj -> some_condition_met).findFirst();


(注意:这不会迭代整个集合,因为流是延迟计算的-它将在与条件匹配的第一个对象处停止)。

如果只想知道集合中是否存在条件为真的元素,则可以使用anyMatch

boolean result = someObjects.stream().anyMatch(obj -> some_condition_met);

10-06 14:49