java - 如何按值而不是键对 TreeMap 进行排序

标签 java treemap

Possible Duplicate:
TreeMap sort by value

嗨,我想按值而不是按键对 TreeMap 集合进行排序。例如,

 TreeMap map=new TreeMap();
    map.put(new Integer(100),"ccc");
    map.put(new Integer(300),"bbb");
    map.put(new Integer(200),"ddd");
    map.put(new Integer(400),"aaa");

它应该被排序为,

1) 400 -> aaa
2) 300 -> bbb
3) 100 -> ccc
4) 200 -> ddd

最佳答案

你需要一个特殊的迭代器,试试这个

...
    Iterator i = valueIterator(map);
    while(i.hasNext()) {
        System.out.println(i.next());
    }
...
    Iterator valueIterator(TreeMap map) {
        Set set = new TreeSet(new Comparator<Map.Entry<Integer, String>>() {
            @Override
            public int compare(Entry<Integer, String> o1, Entry<Integer, String> o2) {
                return  o1.getValue().compareTo(o2.getValue()) > 0 ? 1 : -1;
            }
        });
        set.addAll(map.entrySet());
        return set.iterator();
    }

输出

400=aaa
300=bbb
100=ccc
200=ddd

您可以扩展 TreeMap 并向其中添加此方法。请注意,比较器允许重复值,因为它永远不会返回 0。

关于java - 如何按值而不是键对 TreeMap 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944353/

相关文章:

java - 合并2个数组

java - 将文件输入添加到树形图

javascript - Highcharts 中树形图中的单击事件

java - treeMap 中的值是否排序为 : java

Java - 使用从父类(super class)导入的方法

java - 将持久化实体更改为同级子类

java - 当用户输入数字时计算数字的出现次数并显示最高出现次数

d3.js - 可缩放 TreeMap 上的 D3 自动换行

java - 图形数据从边输入格式转换为顶点输入格式

java - 在 WebView 完全加载后执行任务