How to sort a treemap based on its values?

Click Upvote picture Click Upvote · Sep 19, 2009 · Viewed 80.7k times · Source

How can I sort a treemap using its values rather than the key?

Answer

Anthony picture Anthony · Jan 21, 2010

Here is a solution:

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;
}

Note that the map is sorted from the highest value to the lowest.