如何根据树的值对树图进行排序?

Cli*_*ote 14 java treemap

如何使用其值而不是键对树图进行排序?

Ant*_*ony 24

这是一个解决方案:

public static <K, V extends Comparable<V>> Map<K, V> sortByValues(final Map<K, V> map) {
    Comparator<K> valueComparator =  new Comparator<K>() {
        public int compare(K k1, K k2) {
            int compare = map.get(k2).compareTo(map.get(k1));
            if (compare == 0) return 1;
            else return compare;
        }
    };
    Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
    sortedByValues.putAll(map);
    return sortedByValues;
}
Run Code Online (Sandbox Code Playgroud)

请注意,地图从最高值到最低值排序.


Zed*_*Zed 15

你不能因为TreeMap的比较器仅针对键运行,例如,请参阅此构造函数.

无论如何,您可以使用多个集合,使用TreeMap(或更确切地说是HashMap)按键查找元素,并使用SortedSet迭代值.


ric*_*chs 6

Google Guava提供了TreeMultiMap.

您还可以使用两个集合.你想达到什么目的?你能解释一下你的用例吗?


ska*_*man 5

Apache Commons Collections有一个TreeBidiMap:

此类保证映射将按升序键顺序和升序值顺序排列,并根据键和值的类的自然顺序进行排序.

有它的一个Java5的,仿制药口这里.