Java 8中的新Stream非常好,特别是在并行处理功能方面。但是,我不知道如何在Collections方法之外应用并行处理。
例如,如果我要从一个文件创建一个流,我使用以下方法:
Stream<String> lines = Files.lines(Paths.get("test.csv"));但是,没有对应的parallelStream方法,例如在集合中。看起来可能有一个线程抓取下一行,而可能有几个线程解析和处理行。
这可以用StreamSupport.stream()来完成吗?
发布于 2014-08-21 21:25:08
有一个简单得多的答案:任何流都可以通过调用.parallel()来并行转换:
Stream<String> lines = Files.lines(Paths.get("test.csv"))
.parallel();关于Collection的.parallelStream()方法只是一种方便。
请注意,除非您每行进行大量处理,否则来自文件的IO的顺序性质可能占主导地位,并且您可能不会得到您希望的那么多的并行性。
发布于 2014-08-21 21:17:25
是的--事实证明,您可以使用StreamSupport.stream()从顺序流创建一个并行流。按照我的问题的模式,它将如下所示。
StreamSupport.stream(Files.lines(Paths.get("test.csv")).spliterator(), true);“真正的”是使之平行。在测试中,它将使用范围从单一的核心扩展到我的机器上的所有核心。它按顺序读行,但是对行的处理没有按顺序完成,就我的目的而言,这很好。
https://stackoverflow.com/questions/25436026
复制相似问题