按从高到低的值对哈希图进行排序

我正在尝试对具有从高到低的值的结构的哈希图进行排序。

我在下面创建了一个函数来对数据进行排序。

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);
}

我收到以下错误:

线程“主”中的异常java.lang.ClassCastException:无法将类java.lang.String强制转换为类java.lang.Integer(java.lang.String和java.lang.Integer在加载程序“ bootstrap”的模块java.base中')

我认为我的错误是由上述的for()引起的,导致我无法读取Key值。

我应该做些什么调整?

谢谢您的帮助。

评论
  • 仰起头~
    仰起头~ 回复

    这是做这项工作的比较器:

    public class MapKeyByValueComparator<K, T> implements Comparator<K> {
    
        private final Map<K, T> map;
    
        private final Comparator<T> comparator;
    
        public MapKeyByValueComparator(Map<K, T> map, Comparator<T> comparator) {
            this.map = map;
            this.comparator = comparator;
        }
    
        @Override
        public int compare(K o1, K o2) {
            int ritem = comparator.compare(map.get(o1), map.get(o2));
            // CAN NOT RETURNS 0
            if (ritem == 0) {
                ritem = 1;
            }
            return ritem;
        }
    
    }
    

    但是要注意,这违反了可比合同

    强烈建议(尽管不是必需的)自然顺序应与等号保持一致。之所以如此,是因为没有显式比较器的排序集(和排序映射)与自然排序与等式不一致的元素(或键)一起使用时,其行为“奇怪”。特别是,这样的排序集(或排序图)违反了根据equals方法定义的集合(或图)的一般约定。