首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ParallelStream文件

ParallelStream文件
EN

Stack Overflow用户
提问于 2014-08-21 21:13:11
回答 2查看 2.2K关注 0票数 0

Java 8中的新Stream非常好,特别是在并行处理功能方面。但是,我不知道如何在Collections方法之外应用并行处理。

例如,如果我要从一个文件创建一个流,我使用以下方法:

代码语言:javascript
复制
Stream<String> lines = Files.lines(Paths.get("test.csv"));

但是,没有对应的parallelStream方法,例如在集合中。看起来可能有一个线程抓取下一行,而可能有几个线程解析和处理行。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-21 21:25:08

有一个简单得多的答案:任何流都可以通过调用.parallel()来并行转换:

代码语言:javascript
复制
Stream<String> lines = Files.lines(Paths.get("test.csv"))
                            .parallel();

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

请注意,除非您每行进行大量处理,否则来自文件的IO的顺序性质可能占主导地位,并且您可能不会得到您希望的那么多的并行性。

票数 9
EN

Stack Overflow用户

发布于 2014-08-21 21:17:25

是的--事实证明,您可以使用StreamSupport.stream()从顺序流创建一个并行流。按照我的问题的模式,它将如下所示。

代码语言:javascript
复制
StreamSupport.stream(Files.lines(Paths.get("test.csv")).spliterator(), true);

“真正的”是使之平行。在测试中,它将使用范围从单一的核心扩展到我的机器上的所有核心。它按顺序读行,但是对行的处理没有按顺序完成,就我的目的而言,这很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25436026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档