【问题标题】:Does Stream.boxed() preserve order?Stream.boxed() 是否保留顺序?
【发布时间】:2016-02-26 17:57:47
【问题描述】:

假设我有一个无限流。

IntStream istream = IntStream.iterate(0, i -> i + 1).limit(100);
Stream<Integer> boxedStream = istream.boxed();

boxed() 方法是否保留顺序?可能是的,但我在文档中找不到。

【问题讨论】:

  • 例如,IntStream 上的 Javadoc 说它返回 stream that is consistent of the elements of this stream, each boxed to an Integer。我不希望它改变顺序。您是否看到更改的订单?如何?也许尝试使用 Stream::peek 找出答案?
  • 问题有点不清楚,“订单”是什么意思?一切都在那里:docs.oracle.com/javase/8/docs/api/java/util/stream/… 尽管您可能想多次阅读整个文档:)。
  • 我确定确实如此,但我找不到任何文件表明它可以保证这样做。 (我会选择文档表明中间操作不会修改 Spliterator 标志,除非指定这样做,但我什至找不到任何相关信息。)
  • 是的,我认为是的。 Venkat Subramaniam 在推特上给我写信说,如果没有另行说明,则不应更改订单。

标签: java java-8 java-stream


【解决方案1】:

实际上每个中间操作都默认保留一个顺序。唯一的例外是:

  • unordered() 删除了排序约束。
  • sorted() 改变了顺序。

如果没有明确指定,您可以假设操作保持顺序。即使distinct() 保持顺序,虽然它增加了并行流的复杂性。

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 2017-03-04
    • 1970-01-01
    • 2021-03-04
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多