当前位置: 首页 > 知识库问答 >
问题:

stream.sorted().foreach()是否按预期工作?[副本]

唐茂实
2023-03-14
someMap.keySet().stream().sorted().forEach(/* ... */);

此操作的行为显式不确定。对于并行流管道,此操作不能保证尊重流的相遇顺序,因为这样做会牺牲并行性的好处。对于任何给定的元素,操作可以在库选择的任何时间和线程中执行

我知道如果代码使用.parallelstream()而不是.stream(),就不能保证它能够工作,但是由于它使用的是顺序流(Javadoc没有说明这一点),所以我不确定。这是否保证始终有效,或者代码需要使用.foreachordered()而不是.foreach()才能有效?

编辑:我认为这个问题不是Java8 Stream中forEach vs forEachOrdered的重复,因为这个问题问的是“forEach和forEachOrdered之间的差异的例子是什么”,接受的答案基本上是“并行流”。这个问题是关于顺序流的。

共有1个答案

何宏博
2023-03-14

不能保证foreach终端操作将按遇到顺序处理元素,因此“显式不确定”。尽管在当前实现下,它应该按照流的遭遇顺序处理序列流的元素。

ForeachOrdered主要用于以下情况:您使用的是并行流,如果流具有已定义的遭遇顺序,则希望尊重该流的遭遇顺序。

对顺序流使用foreachforeachOrdered将具有相同的效果,因此这是一个偏好问题。

 类似资料:
  • 我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它

  • 当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。

  • 我试图使用来传输我根据前面的问题设置的自定义标头。 我在文件中读到... 我的属性包括:

  • 我正在和selenium一起工作,刮一些数据。 有一个按钮在页面上,我正在点击说“Custom_Cols”。这个按钮为我打开了一个窗口,我可以在那里选择我的列。 我的问题是为什么新窗口上的元素不可见,即使我正在等待元素的可见。补充一下,我已经尝试增加延迟时间,但我还是会偶尔出现这个错误。 我的密码在这里

  • 我对Java很陌生,我正在努力学习。我写了少量的代码,但结果并不是我所期望的。看起来,无论我将体重设置为什么,它都不会显示“你的脂肪”上方的打印。我错过了什么? 我希望这段代码能够顺序检查每个else语句给出的int值,并打印出与int值相等的行。