小编zic*_*ico的帖子

使流平行于 flatMap 的结果

考虑以下简单代码:

Stream.of(1)
  .flatMap(x -> IntStream.range(0, 1024).boxed())
  .parallel() // Moving this before flatMap has the same effect because it's just a property of the entire stream
  .forEach(x -> {
     System.out.println("Thread: " + Thread.currentThread().getName());
  });
Run Code Online (Sandbox Code Playgroud)

很长一段时间,我认为即使在flatMap. 但是上面的代码打印了所有的“Thread:main”,证明我的想法是错误的。

一种使其并行的简单方法flatMap是收集然后再次流式传输:

Stream.of(1)
  .flatMap(x -> IntStream.range(0, 1024).boxed())
  .parallel() // Moving this before flatMap has the same effect because it's just a property of the entire stream
  .collect(Collectors.toList())
  .parallelStream()
  .forEach(x -> {
     System.out.println("Thread: " + Thread.currentThread().getName());
  });
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法,以及flatMap仅在调用之前并行化流的设计选择,而不是在调用之后并行化。

========关于问题的更多说明========

从一些答案来看,我的问题似乎没有完全表达出来。正如@Andreas 所说,如果我从 …

java parallel-processing java-stream

5
推荐指数
1
解决办法
293
查看次数

标签 统计

java ×1

java-stream ×1

parallel-processing ×1