【问题标题】:Pros and Cons of usage forEach and Stream [duplicate]使用 forEach 和 Stream 的优缺点 [重复]
【发布时间】:2018-07-25 13:35:06
【问题描述】:

从 java 8 开始遍历列表我可以同时使用:

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

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

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      除非您有并行流,否则使用第二种情况没有任何优势。有一个缺点,即Stream.forEach() 不保证尊重遇到顺序。 Stream.forEachOrdered() 是更准确(但仍然没有必要)的等价物。

      【讨论】:

      • forEach的不保证遇到顺序是否也适用于有顺序源的非并行流?
      • @tsolakp 简而言之,是的。更多信息请看这里:stackoverflow.com/q/34247318/1553851
      • 有人必须编写更好的 Javadoc:)。这里也是来自 Javadoc 的 sn-p。 “如果流是有序的,在相同源上重复执行相同的流管道将产生相同的结果;”
      • @shmosel 加一,我只是没有找到正确的词,即使 forEach 仅通过副作用操作,强烈建议不要通过 stream().forEach 将元素添加到列表中,并且可能会产生错误的结果,而另一个就可以了。
      • @Eugene OP 从未提到过这样的用途。至于一般的副作用,我只是引用文档:少量的流操作,例如forEach()peek(),只能通过副作用进行操作;这些应该小心使用。
      猜你喜欢
      • 1970-01-01
      • 2015-05-18
      • 2013-06-09
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多