【问题标题】:Will the list returned by a stream always be sorted if the input list was sorted? [duplicate]如果输入列表已排序,流返回的列表是否总是排序? [复制]
【发布时间】:2018-05-14 18:51:59
【问题描述】:

假设您有一个已排序的List<String> input。我想知道下面的List<String> output 是否会一直排序?

List<String> output = input.stream
                           .filter(<predicate>)
                           .collect(Collectors.toList());

【问题讨论】:

  • 在您的确切示例中,将保留顺序,但通常您需要检查每个中间操作。对于并行流来说,事情要有趣得多——中间操作没有顺序,而终端操作有

标签: java-8 java-stream


【解决方案1】:

如果您从有序集合(例如列表、数组)或某些生成器(例如 Stream.iterate、范围等)创建流,则流将保留该顺序,并且流的结果将按原始元素的顺序累积.

所以在这种情况下,是的,订单被保留了。

【讨论】:

  • 除非通过一些中间操作破坏了这个顺序,显然
  • @Eugene 我希望任何明确调用 unordered() 的人都知道它的含义和作用,但是同意!
  • 即使是无序的也不是微不足道的,因为它只意味着通过 whatever 获取任何元素,对于此示例....unordered().findFirst() 返回 real 第一个流源,非常好。
【解决方案2】:

Collectors.toList() 所述,在返回列表中维护流中元素的顺序:

一个收集器,它将所有输入元素收集到一个列表中,在 遇到秩序

【讨论】:

    猜你喜欢
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 2013-11-17
    相关资源
    最近更新 更多