排序降序:Java Map

2022-09-01 04:04:13

我想做的是按值对地图进行排序。我浏览了许多在stackoverflow网站上可用的问题,并发现了以下解决方案,它可以满足我的需求,但缺少一件小事。

链接1:排序地图

但是我遇到的问题是,默认情况下,这是按值的升序排序的。我想按降序排序:

所以我做的是创建了一个实现比较器的类。

class MyComparator implements Comparator {
    Map map;
    public MyComparator(Map map) {
        this.map = map;
    }
    public int compare(Object o1, Object o2) {
        return ((Integer) map.get(o2)).compareTo((Integer) map.get(o1));
    }
}

然后我把我的地图传递给树状图,

MyComparator comp = new MyComparator(myMap);
Map<String, Integer> newMap = new TreeMap(comp);
newMap.putAll(myMap);

这似乎是一种糟糕的方法,因为我觉得这是低效的。有没有办法更改链接中的解决方案,以默认按降序排序。


答案 1

您应该使用 .new TreeMap<>(Collections.reverseOrder());

Map<String, Integer> newMap = new TreeMap<>(Collections.reverseOrder());
newMap.putAll(myMap);

或者反转现有的比较器,如值比较器。它的工作方式类似于在调用 / 之前交换两个对象的方法。Collections.reverseOrder(comparator)comparecompareTo


答案 2
    TreeMap<Long,String> treeMap = new TreeMap<Long,String>();

    NavigableMap <Long, String> nmap = treeMap.descendingMap();

    Set<Long, String> set = nmap.entrySet();

    Iterator<Long, String> iterator = set.iterator();

现在你可以迭代迭代器并使用 iterator.hasNext() 和 iterator.next() 方法提取值 ......


推荐