java - Stream 分组后不保留顺序

标签 java java-stream

我有一个列表名称 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/

相关文章:

lambda - [SonarLint] : make this anonymous inner class a lambda

java - 在 Java 中使用本地数字格式化程序进行双值对齐

java - 如何在 Java 中使用正则表达式匹配有效的操作序列

java - Selenium Webdriver 在执行测试脚本期间非常不一致

Java 8 字符串比较

java - NPE on java stream reduce操作

java - 如何使用 Java 8 增强 List 方法中的重复对象?列表中的对象是嵌套的,这就是使这个复杂的原因

java - 如何证明在项目中使用脚本语言是合理的

java - Try-With-Resources 中的多个资源 - 里面的语句

java - 其他流的笛卡尔积流,每个元素作为一个列表?