Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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
Java 使用forEach和Stream的利弊_Java_Java 8_Java Stream - Fatal编程技术网

Java 使用forEach和Stream的利弊

Java 使用forEach和Stream的利弊,java,java-8,java-stream,Java,Java 8,Java Stream,从java 8开始迭代列表,我可以使用以下两种方法: List list = new ArrayList(); 1. list.forEach(...) 2. list.stream().forEach(...) 使用第二种情况有什么好处吗?要将列表转换为流?使用第二种情况没有好处,除非您有一个并行流。有一个缺点,即Stream.forEach()不能保证遵守遭遇顺序。更准确(但仍然不必要)的等价物是Stream.forEachOrdered()不,理论上,第二个选项比第一个选项更糟糕-您需要

从java 8开始迭代列表,我可以使用以下两种方法:

List list = new ArrayList();
1. list.forEach(...)
2. list.stream().forEach(...)

使用第二种情况有什么好处吗?要将列表转换为流?

使用第二种情况没有好处,除非您有一个并行流。有一个缺点,即
Stream.forEach()
不能保证遵守遭遇顺序。更准确(但仍然不必要)的等价物是
Stream.forEachOrdered()

不,理论上,第二个选项比第一个选项更糟糕-您需要支付实例化/垃圾收集和调用
Stream
实例的成本,但实际上并没有得到任何回报


此外,理论上,
Stream.forEach()
的迭代顺序是不确定的。

forEach的不保证遭遇顺序是否也适用于对源进行排序的非并行流?@tsolakp简单地说,是的。更多信息请参见此处:有人必须编写更好的Javadoc:)。下面是来自Javadoc的代码片段。“如果流被排序,在相同的源上重复执行相同的流管道将产生相同的结果;”@shmosel+1,我只是没有找到正确的词,即使forEach仅通过副作用操作,通过
stream()将元素添加到列表中.forEach
被强烈劝阻,它可能会产生错误的结果,而另一个也可以。@Eugene OP从未提到过这样的用法。至于一般的副作用,我将引用文档:少量流操作,例如
forEach()
peek()
,只能通过副作用来操作;使用时应小心。