java - 按值从高到低对 Hashmap 进行排序

标签 java data-structures

我正在尝试对具有从高到低的值结构的 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/

相关文章:

java - CyclicBarrier 未按预期工作

java - 什么是NullPointerException,我该如何解决?

java - 我可以将自己的类数据保存到文件中吗?

java - 为什么我们在实现链表时要使用2个构造函数?

c++ - 如何让你的数据结构接受任何类的对象 - C++

java - Java中的自减运算

java - 从 Cassandra 中提取的 Netflix Zuul 过滤器无法正常工作

c++ - 我需要什么类型的数据结构来链接到多个参数

data-structures - 如何在 PLT Scheme 中打印结构以显示其字段?

java - 将 Java List 转换为 Pivot 格式