PartitioningBy 是否保留原始列表中元素的顺序?

leo*_*n01 4 java java-stream

我已经订购了 LocalDateTime 列表,我需要在特定日期的午夜将其拆分。两个新列表中元素的顺序不应更改。

List<LocalDateTime> l = Arrays.asList(LocalDateTime.of(2017,10,24,7,0,0),LocalDateTime.of(2017,10,24,8,0,0),LocalDateTime.of(2017,10,25,7,0,0),LocalDateTime.of(2017,10,25,9,0,0));
Run Code Online (Sandbox Code Playgroud)

Collectors.partitioningBy 是否保证订单将被保留?

l.stream().collect(Collectors.partitioningBy(t-> t.isAfter(LocalDateTime.of(2017,10,25,0,0,0))))
Run Code Online (Sandbox Code Playgroud)

输出:

{false=[2017-10-24T07:00, 2017-10-24T08:00], true=[2017-10-25T07:00, 2017-10-25T09:00]}
Run Code Online (Sandbox Code Playgroud)

Hol*_*ger 7

内置收集器的文档明确提到 a 何时Collector无序收集器,例如 fortoSet()groupingByConcurrent(\xe2\x80\xa6)。如果流是有序的并且它们没有\xe2\x80\x99t 具有本身无序的下游收集器,则所有未指定为无序的收集器将保留遇到顺序

\n\n

partitioningBy(predicate)相当于partitioningBy(predicate, toList())且因此将维持相遇顺序。

\n\n

一个反例是partitioningBy(predicate, toSet())不保留任何顺序,同样,流本身也是无序的,例如hashSet.stream() .collect(partitioningBy(predicate)),不对结果顺序做出任何保证。

\n