我正在尝试对具有从高到低的值结构的 HashMap 进行排序。
我在下面创建了一个函数来对数据进行排序。
public static void SortDataHighToLow (Map <String, Integer> UnsortedMap){
List <Integer> list = new ArrayList(UnsortedMap.keySet());
Collections.sort(list,new Comparator <Integer>(){
@Override
public int compare(Integer arg0, Integer arg1) {
return arg0-arg1;
}
});
Map <String, Integer> sortedMap = new LinkedHashMap<>();
for (Integer keys: list){
sortedMap.put(UnsortedMap.toString(), keys);
}
System.out.println(sortedMap);
}
我收到以下错误:
线程“main”中的异常java.lang.ClassCastException:类java.lang.String无法转换为类java.lang.Integer(java.lang.String和java.lang.Integer位于模块java.base中加载器“引导”)
我相信我的错误是由上面的 for() 引起的,我无法读取 Key 值。
我应该做什么调整?
感谢您的帮助。
最佳答案
根据 @deHaar 的回答,我的问题得到了解决。代码如下。
private static <K, V> Map<K, V> sortByValue(Map<K, V> map) {
List<Entry<K, V>> list = new LinkedList<>(map.entrySet());
Collections.sort(list, new Comparator<Object>() {
@SuppressWarnings("unchecked")
public int compare(Object o1, Object o2) {
return ((Comparable<V>) ((Map.Entry<K, V>) (o1)).getValue()).compareTo(((Map.Entry<K, V>) (o2)).getValue());
}
});
Map<K, V> result = new LinkedHashMap<>();
for (Iterator<Entry<K, V>> it = list.iterator(); it.hasNext();) {
Map.Entry<K, V> entry = (Map.Entry<K, V>) it.next();
result.put(entry.getKey(), entry.getValue());
}
return result;
}
关于java - 按值从高到低对 Hashmap 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61865783/