在Java8中,迭代流的最快方法是什么?
如果我有一个集合,并且我想在一个过滤流上迭代,那么我可以执行以下任一操作(以及更多钝角选项):在Java8中,迭代流的最快方法是什么?,java,java-8,java-stream,Java,Java 8,Java Stream,如果我有一个集合,并且我想在一个过滤流上迭代,那么我可以执行以下任一操作(以及更多钝角选项): 哪个更快?一张单子还是一套?是否有某种方法可以收集到一个Iterable或其他类型的数据,我可以对其进行迭代?如果您只想对流的元素进行迭代,则无需将其收集到集合中,只需使用forEach: collection.stream() .filter(...) .forEach (item -> { //
哪个更快?一张单子还是一套?是否有某种方法可以收集到一个Iterable或其他类型的数据,我可以对其进行迭代?如果您只想对
流的元素进行迭代,则无需将其收集到集合中,只需使用forEach
:
collection.stream()
.filter(...)
.forEach (item -> {
// do something with item
}
);
有没有什么方法可以收集到一个简单的Iterable或其他我可以迭代的类型
如果出于某种原因,您确实希望使用流
作为每个
循环的目标,则不必收集它:
for (Item item : (Iterable<Item>)
coll.stream().filter(...)::iterator) {
}
for(项:(Iterable)
coll.stream().filter(…)::迭代器){
}
或:
Iterable iter=coll.stream().filter(…)::迭代器;
(项目:国际热核实验堆){
}
这是因为Iterable
是一个功能接口,即使它没有这样注释
不过,这只是一件有趣的事情<代码>forEach
正如Eran所建议的,一般来说,这可能是处理事情的“正确”方式。将迭代器
描述为“转义图案填充”。如果您不关心元素顺序,请使用parallelStream:
collection.parallelStream().filter(...).forEach(...)
通过这种方式,您可以使用更多线程遍历集合
为了测量哪一个流或并行流处理对于特定案例审查更快@Brian Goetz回答相关的Hi。你为什么不把我的回答记为正确的?并行流不是比使用一个线程的流方法更快(对于更大的集合)吗?部分原因是,在我的例子中,per,使用并行流对我没有好处(集合不够大)。部分原因是,根据具体情况,两个答案都同样正确,因此我选择了更简单的答案。
Iterable<Item> iter = coll.stream().filter(...)::iterator;
for (Item item : iter) {
}
collection.parallelStream().filter(...).forEach(...)