当在 Iterable
上使用外部迭代时,我们使用来自增强型 for-each 循环的 break
或 return
作为:
for (SomeObject obj : someObjects) {
if (some_condition_met) {
break; // or return obj
}
}
我们如何在 Java 8 lambda 表达式中使用内部迭代来中断
或返回
,例如:
someObjects.forEach(obj -> {
//what to do here?
})
最佳答案
如果您需要此功能,则不应使用 forEach
,而应使用流上可用的其他方法之一;哪一个取决于您的目标是什么。
例如,如果此循环的目标是查找与某个谓词匹配的第一个元素:
Optional<SomeObject> result =
someObjects.stream().filter(obj -> some_condition_met).findFirst();
(注意:这不会迭代整个集合,因为流是延迟计算的 - 它将停止在第一个与条件匹配的对象处)。
如果您只想知道集合中是否存在条件为 true 的元素,您可以使用 anyMatch
:
boolean result = someObjects.stream().anyMatch(obj -> some_condition_met);
关于java - 从 Java 8 流 forEach 中断还是返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60340649/