我订购了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));
Collectors.partitioningBy是否保证订单会被保留?
l.stream().collect(Collectors.partitioningBy(t-> t.isAfter(LocalDateTime.of(2017,10,25,0,0,0))))
输出:
{false=[2017-10-24T07:00, 2017-10-24T08:00], true=[2017-10-25T07:00, 2017-10-25T09:00]}
答案 0 :(得分:3)
当Collector
是无序收集器时,documentation of the built-in collectors明确提及,例如适用于toSet()
或groupingByConcurrent(…)
。未指定为无序的所有收集器将保留遭遇订单,如果订购了流并且它们没有本身无序的下游收集器。
partitioningBy(predicate)
相当于partitioningBy(predicate, toList())
,因此会维持遭遇顺序。
一个反例是partitioningBy(predicate, toSet())
,它不保留任何顺序,同样,一个本身是无序的流,例如, hashSet.stream() .collect(partitioningBy(predicate))
,对结果顺序没有任何保证。