我有一张地图
Map<String, Set<String>> map
我想编写一个返回列表List<String>
的函数,该列表按照每个键值集的大小对map进行排序。列表中的项目应该是地图的键。最好的方法是什么?
我知道我可以使用set.size()但是如何保持集合大小与相应键字符串的关系?
答案 0 :(得分:2)
您可以使用Stream API以这种方式实现:
List<String> sortedKeys = map.entrySet().stream()
.sorted((a, b) -> Integer.compare(a.getValue().size(), b.getValue().size()))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
答案 1 :(得分:1)
Frostbit答案非常正确,但您可以使用comparisonByValue()代替:
List<String> sortedKeys = map.entrySet().stream()
.sorted((a, b) -> Integer.comparingByValue(a.size(),b.size())) //getValue() removed
.map(Map.Entry::getKey)
.collect(Collectors.toList());