【发布时间】:2014-07-20 01:51:37
【问题描述】:
我只是在阅读一些 Java 8 代码,据我了解,您可以使用 Stream() 或 parallelStream() 迭代集合。后者的优点是使用并发将任务拆分到现代多核处理器上并加快迭代速度(尽管它不能保证结果的顺序)。
来自Oracle Java tutorial的示例代码:
double average = roster
.stream() /** non-parallel **/
.filter(p -> p.getGender() == Person.Sex.MALE)
.mapToInt(Person::getAge)
.average()
.getAsDouble();
double average = roster
.parallelStream()
.filter(p -> p.getGender() == Person.Sex.MALE)
.mapToInt(Person::getAge)
.average()
.getAsDouble();
如果我有一个集合并且我不关心它的处理顺序(即它们都有唯一的 ID 或者无论如何都是无序的或处于预排序状态),那么总是使用 parallelStream 方式是否有意义迭代一个集合?
除了我的代码在单核机器上运行时(此时我假设 JVM 会将所有工作分配给单核,因此不会破坏我的程序), 到处使用 parallelStream() 有什么缺点吗?
【问题讨论】:
标签: java lambda java-8 java-stream