我有一个列表名称 availableSeats 我正在按 blockIndex 属性进行排序和分组,如下所示:
availableSeats.stream()
.sorted(Comparator.comparing(SeatedTicketAssignment::getBlockIndex))
.collect(Collectors.groupingBy(SeatedTicketAssignment::getBlockIndex))
.forEach((block, blockAssignments) -> {
//Rest of the code
}
问题是分组依据的结果没有按照blockIndex排序。
最佳答案
请记住,Collectors#groupingBy(Function)
将返回 HashMap
,这不保证顺序。如果您希望按照聚合身份(您的 i % 2 == 0
结果)显示的顺序进行排序,那么您可以使用 LinkedHashMap
:
.collect(Collectors.groupingBy(i -> i % 2 == 0, LinkedHashMap::new, Collectors.toList()))
将返回 LinkedHashMap<Boolean, List<SeatedTicketAssignment>>
(因为您的收集器按 boolean 值分组)。此外,由于收集器使用的列表是 ArrayList
,它应该保留流的迭代顺序相对于列表。
关于java - Stream 分组后不保留顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45557290/