Java 8中新的Stream API非常好,特别是对于并行处理功能。但是,我看不到如何在Collections parallelStream方法之外应用并行处理。

例如,如果我要从文件创建流,则使用以下命令:

Stream<String> lines = Files.lines(Paths.get("test.csv"));


但是,没有类似Collections中的并行parallelStream方法。似乎可能有一个线程在抓取下一行,而可能有多个线程在解析和处理这些行。

可以用StreamSupport.stream()完成吗?

最佳答案

有一个简单得多的答案:可以通过调用.parallel()将任何流变为并行:

Stream<String> lines = Files.lines(Paths.get("test.csv"))
                            .parallel();


Collection上的.parallelStream()方法只是一种方便。

请注意,除非您每行要进行大量处理,否则文件中IO的顺序性质可能会占主导地位,并且您可能无法获得希望的并行度。

10-08 10:57