java - 如何按集合大小总和对 Map<String, List<Set<Long>>> 进行排序?

标签 java java-8 java-stream

如何按集合大小总和对 Map(String, List(Set(Long))) 进行排序? 我有一个像这样的 HashMap:

myMap.put("monday", [[3215, 5654], [5345], [3246, 7686, 4565]]) // 6 Long elements in total
myMap.put("tuesday", [[3215, 5654], [5345, 2879, 6734], [3246, 7686, 4565]]) // 8 Long elements in total
myMap.put("wednesday", [[9845, 2521], [0954]]) // 3 Long elements in total

我希望 myMap 像这样排序:

("tuesday", [[3215, 5654], [5345, 2879, 6734], [3246, 7686, 4565]]) // 8 Long elements in total
("monday", [[3215, 5654], [5345], [3246, 7686, 4565]]) // 6 Long elements in total
("wednesday", [[9845, 2521], [0954]]) // 3 Long elements in total

最佳答案

使用LinkedHashMap进行排序:

Map<String, List<Set<Long>>> result = map.entrySet()
    .stream()
    .sorted(Comparator.comparingInt(e->e.getValue().stream().mapToInt(Set::size).sum()))
    .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));

关于java - 如何按集合大小总和对 Map<String, List<Set<Long>>> 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56198992/

相关文章:

java - 通过java程序从WSDL生成java类

java - 删除从不同 jar 调用相同对象的重复代码

Java 流 : find if stream contains null

java - 使用 Collections.frequency() 打印某些值

java - 将对象流收集到 Map 中

java - 将变量传递给另一个类是否使用同一个类?

java - 在使用 switch case 方法确定 java 中的新结果后,如何将两个字符串变量连接成结果字符串?

java - 加入 Java 8 Collection API

java - 使用 Java 8,打印文件中所有行的最首选和最简洁的方法是什么?

list - 如何使用lambda,Java在列表迭代结束时返回值