Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java8中,迭代流的最快方法是什么?_Java_Java 8_Java Stream - Fatal编程技术网

在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(...)