我已经订购了 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)
内置收集器的文档明确提到 a 何时Collector是无序收集器,例如 fortoSet()或groupingByConcurrent(\xe2\x80\xa6)。如果流是有序的并且它们没有\xe2\x80\x99t 具有本身无序的下游收集器,则所有未指定为无序的收集器将保留遇到顺序。
partitioningBy(predicate)相当于partitioningBy(predicate, toList())且因此将维持相遇顺序。
一个反例是partitioningBy(predicate, toSet())不保留任何顺序,同样,流本身也是无序的,例如hashSet.stream() .collect(partitioningBy(predicate)),不对结果顺序做出任何保证。
| 归档时间: |
|
| 查看次数: |
1096 次 |
| 最近记录: |