Home >Java >javaTutorial >How Can I Sort a TreeMap by its Values in Java?
Sorting a TreeMap by Value
Introduction:
In a TreeMap, elements are sorted based on their natural ordering, which can be the keys or values, depending on the implementation. However, it is possible to sort a TreeMap based on the values of its entries using a comparator.
Solution:
You cannot directly sort a TreeMap by its values. The syntax you tried with the byValue comparator is incorrect.
However, you can achieve the desired functionality by creating a custom SortedSet that contains the entries of the TreeMap. This SortedSet can be created using the entriesSortedByValues() method:
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; } } ); sortedEntries.addAll(map.entrySet()); return sortedEntries; }
This method takes a Map whose values are Comparable and returns a SortedSet of Map.Entry sorted by the values of the entries.
To use this method:
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}" SortedSet<Map.Entry<String,Integer>> sortedEntries = entriesSortedByValues(map); System.out.println(sortedEntries); // prints "[C=1, B=2, A=3]"
Note on Integer Equality:
When comparing Integer values using ==, it checks for reference equality, not value equality. It is recommended to use the equals() method to compare Integer values for equality.
The above is the detailed content of How Can I Sort a TreeMap by its Values in Java?. For more information, please follow other related articles on the PHP Chinese website!