在Java 8中迭代流的最快方法是什么?

时间:2015-04-28 15:32:23

标签: java java-8 java-stream

如果我有一个集合,并且我想迭代过滤流,那么我可以执行以下任一操作(以及更多更钝的选项):

for(item in collection.stream().filter(...).collect(Collectors.toList()))
for(item in collection.stream().filter(...).collect(Collectors.toSet()))

哪个更快?一个列表还是一组?有没有办法收集简单的Iterable或其他类型我可以迭代?

3 个答案:

答案 0 :(得分:9)

如果您只想迭代PreparedStatement的元素,则无需将其收集到SalesReader,只需使用PreparedStatementSetter

Stream

答案 1 :(得分:3)

如果您不关心元素顺序,请使用parallelStream:

collection.parallelStream().filter(...).forEach(...)

这样您就可以使用更多线程遍历集合。

为特定案例审核确定哪个流或parallelStream处理更快@Brian Goetz回答相关problem

答案 2 :(得分:2)

  

有没有办法收集简单的Iterable或其他可以迭代的类型?

如果由于某种原因您确实希望使用Stream作为for-each循环的目标,那么您不必收集它:

for (Item item : (Iterable<Item>)
        coll.stream().filter(...)::iterator) {
}

或:

Iterable<Item> iter = coll.stream().filter(...)::iterator;
for (Item item : iter) {
}

这是有效的,因为Iterable是一个功能界面,即使它没有注释。

不过,这只是一个有趣的事情。 Eran建议的forEach可能是“正确的”#39}。一般的事情。 java.util.stream package descriptioniterator描述为&#34;逃生舱&#34;。