Home >Java >javaTutorial >How Can I Sort a Java TreeMap by Its Values Instead of Keys?
TreeMap Sorting by Value
When working with Java's TreeMap, sorting by the default natural ordering of keys may not always be sufficient. This article explores an alternative approach to sort a TreeMap based on its values.
Problem Description:
You seek a way to design a comparator that allows you to sort a TreeMap by its values instead of the default key ordering. An initial attempt returned an error, prompting questions about passing Map.Entry to the comparator.
Solution:
While it's not possible to sort a TreeMap directly by values, it's feasible to use an external collection to perform this task. By extracting the Map.entrySet(), you can employ a custom comparator to sort the entries based on their values.
The provided generic method, entriesSortedByValues(), achieves this by creating a SortedSet of Map.Entry objects. The method requires the map values to be Comparable and applies a comparator that compares the values to determine the entry ordering.
Implementation:
static <K, V extends Comparable<? super V>> SortedSet<Map.Entry<K, V>> entriesSortedByValues(Map<K, V> map) { SortedSet<Map.Entry<K, V>> sortedEntries = new TreeSet<>( new Comparator<Map.Entry<K, V>>() { @Override public int compare(Map.Entry<K, V> e1, Map.Entry<K, V> e2) { int res = e1.getValue().compareTo(e2.getValue()); return res != 0 ? res : 1; // Handle equal values separately } } ); sortedEntries.addAll(map.entrySet()); return sortedEntries; }
Usage:
Map<String, Integer> map = new TreeMap<>(); map.put("A", 3); map.put("B", 2); map.put("C", 1); System.out.println(map); // prints "{A=3, B=2, C=1}" System.out.println(entriesSortedByValues(map)); // prints "[C=1, B=2, A=3]"
Warning:
Modifying the sorted set or the Map.Entry within it may cause unexpected results, as this is not a "view" of the original map. Additionally, be mindful of using == with Integer objects, as it performs reference equality, not value equality.
The above is the detailed content of How Can I Sort a Java TreeMap by Its Values Instead of Keys?. For more information, please follow other related articles on the PHP Chinese website!