使用流计算笛卡尔积时,我可以并行生成它们,并按顺序消耗它们,以下代码演示了这一点:
int min = 0;
int max = 9;
Supplier<IntStream> supplier = () -> IntStream.rangeClosed(min, max).parallel();
supplier.get()
.flatMap(a -> supplier.get().map(b -> a * b))
.forEachOrdered(System.out::println);
这将按顺序完美打印所有内容,现在考虑以下代码,我想将其添加到列表中,同时保留顺序。
int min = 0;
int max = 9;
Supplier<IntStream> supplier = () -> IntStream.rangeClosed(min, max).parallel();
List<Integer> list = supplier.get()
.flatMap(a -> supplier.get().map(b -> a * b))
.boxed()
.collect(Collectors.toList());
list.forEach(System.out::println);
现在它不按顺序打印!
考虑到我没有要求保留顺序,这是可以理解的。
现在的问题是:是否有一种方法可以collect()
或者是否有一个Collector
可以保留顺序?
.forEachOrdered(i -> list.add(i))
添加元素呢? - fge