分组后流不保留顺序

Mil*_*lad 6 java java-stream

我有一个List名称availableSeats我正在通过blockIndex属性进行排序和分组,如下所示:

availableSeats.stream()
                .sorted(Comparator.comparing(SeatedTicketAssignment::getBlockIndex))
                .collect(Collectors.groupingBy(SeatedTicketAssignment::getBlockIndex))
                .forEach((block, blockAssignments) -> {
                     //Rest of the code
                } 
Run Code Online (Sandbox Code Playgroud)

问题是分组的结果不是由blockIndex排序的.

Rog*_*gue 16

请记住,Collectors#groupingBy(Function)将返回一个HashMap,这不保证订单.如果您希望订购符合聚合身份(您的i % 2 == 0结果)显示的顺序,那么您可以使用LinkedHashMap:

.collect(Collectors.groupingBy(i -> i % 2 == 0, LinkedHashMap::new, Collectors.toList()))
Run Code Online (Sandbox Code Playgroud)

将返回a LinkedHashMap<Boolean, List<SeatedTicketAssignment>>(因为您的收集器按布尔值分组).另外,由于收集器使用的列表是a ArrayList,它应该保留流相对于列表的迭代顺序.

  • 是为了节省我的时间. (2认同)