【发布时间】:2021-03-12 09:58:54
【问题描述】:
我有一个 HashMap,我尝试按其值(从大到小)排序。我想要一个新的 Map 对象,它是新排序哈希图的克隆(或直接对哈希图本身进行排序的方法)。这是我的以下代码:
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class Repetition {
public static Map<Object, Integer> countRepititions(Object[] e) {
Map<Object, Integer> occurrences = new HashMap<>();
for (int i = 0; i < e.length; i++) {
occurrences.putIfAbsent(e[i], 0);
occurrences.computeIfPresent(e[i], (k, v) -> v + 1);
}
return occurrences.entrySet().stream()
.sorted((e1, e2) -> e2.getValue().compareTo(e1.getValue()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, HashMap::new));
}
public static void main(String[] args) {
Object[] arr = { "cat", "dog", "cat", "cow", "cow", "cow" };
System.out.println(countRepititions(arr)); //should be cow, cat, dog
}
}
问题是输出是原始哈希图而不是排序哈希图的输出。如果有人可以帮助我,将不胜感激!
编辑: 我设法改用 LinkedHashMap 来修改当前代码。
【问题讨论】:
-
无法对
HashMap进行排序。 -
请说明您的要求:地图的重点是:它们通常不订购。
标签: java dictionary hashmap java-stream