Mr *_*der 5 java concurrency java-8 java-stream
这个问题来自另一个问题的答案,其中建议使用 map 和 reduce 同时计算总和。
在那个问题中有一个complexCalculation(e)
,但现在我想知道如何通过将计算分成两部分来进一步并行化,以便complexCalculation(e)
= part1(e)
* part2(e)
。我想知道是否可以同时计算集合上的 part1 和 part2(map()
再次使用),然后压缩两个结果流,以便两个流的第 i 个元素与函数 * 组合,以便结果流等于流可以通过complexCalculation(e)
在该集合上进行映射来获得。在代码中,这看起来像:
Stream map1 = bigCollection.parallelStream().map(e -> part1(e));
Stream map2 = bigCollection.parallelStream().map(e -> part2(e));
// preferably map1 and map2 are computed concurrently...
Stream result = map1.zip(map2, (e1, e2) -> e1 * e2);
result.equals(bigCollection.map(e -> complexCalculation(e))); //should be true
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:是否存在一些类似于zip
我在这里尝试描述的功能的功能?
ParallelStream() 保证按照提交的顺序完成。这意味着您不能假设两个并行流可以像这样压缩在一起。
bigCollection.map(e -> complexCalculation(e))
除非您的集合实际上小于您拥有的 CPU 数量,否则您的原始数据可能会更快。
归档时间: |
|
查看次数: |
1048 次 |
最近记录: |