我有一个名为availableSeats的列表,我按照下面的代码通过blockIndex属性进行排序和分组:
availableSeats.stream()
.sorted(Comparator.comparing(SeatedTicketAssignment::getBlockIndex))
.collect(Collectors.groupingBy(SeatedTicketAssignment::getBlockIndex))
.forEach((block, blockAssignments) -> {
//Rest of the code
}
问题在于按组分组的结果未按 blockIndex 排序。
Boolean
,则可以使用partitioningBy
并获得具有固有顺序的映射,但是,在问题的哪个位置出现了该键函数?由于顺序是上一个排序步骤(按相同值)的顺序,因此去除排序操作并收集到TreeMap
中会更简单... - HolgergroupingBy
的第三个参数创建的列表是否应该保留初始列表的输入顺序? - CristianoArrayList
,因此对于顺序流之前的任何顺序都是相关的。 - RoguetoList()
收集器保留顺序。但最终结果是一个包含最多两个组的Map
。当分组为LinkedHashMap
时,映射的顺序取决于第一个元素。当分组为TreeMap
时,它将始终为false, true
。当使用partitioningBy(i -> i % 2 == 0)
时,顺序也将始终为false, true
,但这没有被记录在文档中。此外,当使用partitioningBy(i -> i % 2 == 0)
时,即使在流中不存在(然后为空列表),两个键也将始终存在。这些缺失的信息已经在Java 9的文档中添加了。 - Holger