首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java 8 Streams中的并行性和Flatmap

Java 8 Streams中的并行性和Flatmap
EN

Stack Overflow用户
提问于 2014-06-25 22:24:37
回答 2查看 5.4K关注 0票数 18

考虑以下示例:

代码语言:javascript
复制
IntStream.of(-1, 1)
             .parallel()
             .flatMap(i->IntStream.range(0,1000).parallel())
             .forEach(System.out::println);

是否将内部标志设置为并行重要吗?不管我把它放在一边还是不放,结果看起来都很相似。

另外,为什么代码(ReferencePipeline)对映射进行序列化?我被这个问题弄糊涂了。line

代码语言:js
复制
result.sequential().forEach(downstream);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-05 11:17:30

在当前JDK (jdk1.8.0_25),答案是否定的,

将内部标志设置为parallel并不重要,因为即使您设置了它,.flatMap()实现将流设置为

顺序这里:

代码语言:js
复制
result.sequential().forEach(downstream);

("result“是内部流,它的sequential()方法的文档说:返回一个连续的等效流。可能会返回自身,这是因为流已经是连续的,或者因为基础流状态被修改为连续的。)

在大多数情况下,可能会有不需要付出任何努力若要使内部流并行,请执行以下操作;如果外部流至少具有与可并行运行的线程数相同的项数(ForkJoinPool.commonPool().getParallelism() = 3在我的电脑里)。

票数 17
EN

Stack Overflow用户

发布于 2021-02-26 20:48:30

对于像我这样的人来说,他们迫切需要并行化flatMap,需要一些实用的解决方案,而不仅仅是历史和理论。

我想出的最简单的解决方案是手工展平,基本上是用map + reduce(Stream::concat)..。

已经在另一个帖子中发布了详细信息的答案:https://stackoverflow.com/a/66386078/3606820

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24411313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档