我试图使用Java Streams并行化一些工作。让我们考虑这个简单的例子:
Stream.generate(new Supplier<Integer>() {
@Override
public Integer get() {
return generateNewInteger();
}
})
.parallel()
.forEachOrdered(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println(integer);
}
});
问题在于它不调用forEachOrdered
方法,只有在使用forEach
方法时才有效。我想问题的原因是Stream.generate
内部创建了一个没有ORDERED
特性的InfiniteSupplyingSpliterator
。问题是为什么?似乎我们知道数据生成的顺序。第二个问题是如何在并行流中对生成的流元素进行
forEachOrdered
操作?
.forEachOrdered(System.out::println)
。 - tobias_k