我正在尝试根据值对HashMap
进行排序,以使其按降序排列。但是我不知道如何实现它。我该怎么做呢?
HashMap<K, Integer> keysAndSizeMap = new HashMap<>();
for (K set : map.keySet()) {
keysAndSizeMap.put(set, map.get(set).size());
}
// implementation here?
System.out.println("keysAndSizeMap: " + keysAndSizeMap);
我想要的结果示例:
{800=12, 90=15, 754=20}
{754=20, 90=15, 800=12}
-或-
{"a"=2, "b"=6, "c"=4}
{"b"=6, "c"=4, "a"=2}
答案 0 :(得分:0)
您可以将TreeSet
与自定义比较器一起使用,以对条目进行排序,并使用Java 8流来创建已排序的映射。
TreeSet<Entry<T, Integer>> sortedEntrySet = new TreeSet<Entry<T, Integer>>((e1, e2) -> e2.getValue() - e1.getValue());
sortedEntrySet.addAll(keysAndSizeMap.entrySet());
Map<T, Integer> sortedMap = sortedEntrySet.stream().collect(Collectors.toMap(Entry::getKey, Entry::getValue));
答案 1 :(得分:0)
这是使用流API按值对地图进行排序的一种方法。请注意,生成的映射是LinkedHashMap
,其值按降序排列。
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 10);
map.put(12, 3);
map.put(2, 45);
map.put(6, 34);
System.out.println(map);
LinkedHashMap<Integer, Integer> map2 =
map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.toMap(e -> e.getKey(),
e -> e.getValue(),
(e1, e2) -> null, // or throw an exception
() -> new LinkedHashMap<Integer, Integer>()));
System.out.println(map2);
输入:{1=10, 2=45, 6=34, 12=3}
输出:{2=45, 6=34, 1=10, 12=3}