当前位置: 首页 > 面试题库 >

从Java 8流中断还是返回forEach?

蔡辰钊
2023-03-14
问题内容

当在上使用外部迭代时,Iterable我们使用breakreturn从增强的for-each循环中获取:

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

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

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


 类似资料:
  • 在上使用外部迭代时,我们使用增强的for-each循环中的或作为: 如何使用Java 8 lambda表达式中的内部迭代来或:

  • 有一个简单的: 以及任务对象的列表。如何通过使用获得每个作为的列表。我试过这个: 但它返回

  • 假设我有一个方法将只读视图返回到成员列表中: 进一步假设客户机所做的只是立即对列表进行一次迭代。也许是为了把玩家放进一个JList或者别的什么。客户端没有存储对列表的引用以供以后检查! 对于这种常见的场景,我是否应该返回一个流呢? 还是返回流在Java中不是惯用的?流被设计成总是在创建它们的同一个表达式中“终止”吗?

  • 为了最大限度地利用java8流和Spring4,我在来自Springs jsdbRestTem板的JDBC结果集上使用了流API,如下所示(代码缩短并简化): 这似乎很有效。客户端可以像这样使用流Api,而不用担心jdbc类 但是,当我重构(尝试将流提供给客户端方法)时,像这样: 我明白了 因此,数据似乎只能在方法。是否有一种干净的方法可以绕过这个问题,返回来自DB的元素的惰性流?假设具体化结果和

  • 问题内容: 假设我有一个将只读视图返回到成员列表的方法: 进一步假设所有客户要做的就是立即遍历列表一次。也许将播放器放入JList之类。客户端就不能存储到列表的引用以便稍后进行检查! 在这种常见情况下,我应该返回流吗? 还是在Java中返回流非惯用语?流是否设计为始终在创建它们的相同表达式内被“终止”? 问题答案: 答案是一如既往的“取决于”。这取决于返回的集合的大小。这取决于结果是否随时间变化,

  • 我有以下代码: 问题:是否可以替换 d - *我对这个问题的标题不太清楚-如果有问题,请编辑。 谢啦