如果我有一个集合,并且我想迭代过滤流,那么我可以执行以下任一操作(以及更多更钝的选项):
for(item in collection.stream().filter(...).collect(Collectors.toList()))
for(item in collection.stream().filter(...).collect(Collectors.toSet()))
哪个更快?一个列表还是一组?有没有办法收集简单的Iterable或其他类型我可以迭代?
答案 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
是一个功能界面,即使它没有注释。
forEach
可能是“正确的”#39}。一般的事情。 java.util.stream
package description将iterator
描述为&#34;逃生舱&#34;。