首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >降序排序: Java Map

降序排序: Java Map
EN

Stack Overflow用户
提问于 2013-09-21 02:09:09
回答 5查看 76K关注 0票数 38

我想要做的是按值对映射进行排序。我浏览了stackoverflow网站上的许多问题,找到了下面的解决方案,它们做到了我想要的,但遗漏了一个小东西。

Link1:排序映射

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

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

代码语言:javascript
复制
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));
    }
}

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

代码语言:javascript
复制
MyComparator comp = new MyComparator(myMap);
Map<String, Integer> newMap = new TreeMap(comp);
newMap.putAll(myMap);

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

EN

回答 5

Stack Overflow用户

发布于 2013-09-21 02:17:35

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

代码语言:javascript
复制
Map<String, Integer> newMap = new TreeMap<>(Collections.reverseOrder());
newMap.putAll(myMap);

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

票数 130
EN

Stack Overflow用户

发布于 2014-10-04 20:16:01

代码语言:javascript
复制
    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()方法提取值......

票数 7
EN

Stack Overflow用户

发布于 2017-05-27 01:20:41

这将会起作用:

代码语言:javascript
复制
      TreeMap<Integer, Integer> reverseInteger=new TreeMap<>(new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {
            return o2>o1?1:o2==o1?0:-1;
        }
    });
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18923167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档