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

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

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

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方法定义的集合(或图)的一般约定。
点赞
评论