当在Iterable上使用external iteration时,我们在每个循环中使用增强的breakreturn,如下所示:

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

我们如何在Java 8 lambda表达式中使用internal iteration,比如:

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);

Java相关问答推荐

获取拦截器内部的IP地址

RDX触发ChoiceBox转换器(并按字符串值排序)

Intellij显示项目语言级别最高为12,尽管有java版本17 SDK

错误:在Liferay7.4中找不到符号导入com.liferay.portal.kernel.uuid.PortalUUID;";

我找不到&Quot;配置&的位置

将不受支持的时区UT重写为UTC是否节省?

在Java Swing Paint应用程序中捕获快速鼠标移动时遇到困难

JavaFX如何在MeshView中修复多个立方体?

我不能再在Android Studio Hedgehog上用Java语言创建新项目了吗?

我如何知道MediaDiscoverer何时完成发现介质?

如何在Java记录中设置BigDecimal类型属性的精度?

Java泛型类方法的静态返回类型是否被类型擦除?

在settings.gradle.kts和Build.gradle.kts中使用公共变量

为什么StandardOpenOption.CREATE不能通过Ubuntu在中小企业上运行?

JavaFX:无论何时显示应用程序,如何更改组件/ node 位置?

对角线填充二维数组

组合连接以从两个表返回数据

我该如何为我的类编写getter和setter方法?

H2数据库仅支持%1个结果集?

Java方法参数:括号中的类型声明?