【发布时间】:2021-10-09 16:39:29
【问题描述】:
如何对 HashMap 进行排序,首先按值排序,如果值相同,则按字母顺序对它们进行排序,包括俄语单词。
正确的输出应该是这样的(字符串是键,整数是值):
лицами-18
Apex-15
azet-15
xder-15
анатолю-15
андреевич-15
батальона-15
hello-13
zello-13
полноте-13
我只能按值对它们进行排序,但是当键相同时我无法对它们进行排序。
以下代码帮助了我,但它只适用于单个字符
private static Map<String, Integer> sortByValue(Map<String, Integer> unsortMap, final boolean order)
{
List<Entry<String, Integer>> list = new LinkedList<>(unsortMap.entrySet());
// Sorting the list based on values
list.sort((o1, o2) -> order ? o1.getValue().compareTo(o2.getValue()) == 0
? o1.getKey().compareTo(o2.getKey())
: o1.getValue().compareTo(o2.getValue()) : o2.getValue().compareTo(o1.getValue()) == 0
? o2.getKey().compareTo(o1.getKey())
: o2.getValue().compareTo(o1.getValue()));
return list.stream().collect(Collectors.toMap(Entry::getKey, Entry::getValue, (a, b) -> b, LinkedHashMap::new));
}
private static void printMap(Map<String, Integer> map)
{
map.forEach((key, value) -> System.out.println("Key : " + key + " Value : " + value));
}
【问题讨论】:
-
但是当键相同时我无法对它们进行排序。但是如果您有
HashMap,则键不能相同... -
Map
hm = new HashMap();我的意思是地图
标签: java sorting stream hashmap alphabetical