如何排序Map <string,set <string =“”>&gt;按另一套尺寸

时间:2016-10-23 08:38:01

标签: java sorting

我有一张地图

Map<String, Set<String>> map

我想编写一个返回列表List<String>的函数,该列表按照每个键值集的大小对map进行排序。列表中的项目应该是地图的键。最好的方法是什么?

我知道我可以使用set.size()但是如何保持集合大小与相应键字符串的关系?

2 个答案:

答案 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());