Java - Сортировка TreeMap по значениям с помощью компаратора

Коллекция TreeMap по умолчанию отсортирован по ключам, но если вам нужно отсортировать TreeMap по значениям, то Java предоставляет способ сделать это с помощью метода comparator.

Example:

package codeurjava; 

import java.util.*;

class TreeMapSort {

// Сортировка элементов TreeMap по значениям
public static > Map sortByValues(final Map map) {

Comparator valueComparator = new Comparator() {
public int compare(K k1, K k2) {
int compare = map.get(k1).compareTo(map.get(k2));
if (compare == 0)
return 1;
else
return compare;
}
};

Map TreeMap_triee_par_valeur = new TreeMap(valueComparator);
TreeMap_triee_par_valeur.putAll(карта);
возврат TreeMap_triee_par_valeur;
}

public static void main(String args[]) {

TreeMap treemap = new TreeMap();

// elements
treemap.put("1", "e4");
treemap.put("2", "e5");
treemap.put("3", "e1");
treemap.put("4", "e3");
treemap.put("5", "e2");

System.out.println("Перед сортировкой:");

/* просматриваем несортированную карту дерева с помощью Iterator */

Set set = treemap.entrySet();
Iterator i = set.iterator();
// Показываем elements
while(i.hasNext()) {
Map.Entry entry = (Map.Entry)i.next();
System.out.print(entry.getKey() + " : ");
System.out.println(entry.getValue());
}

System.out.println("После сортировки:");
// вызываем метод sortByvalues()
Map TreeMap_triee_par_valeur = sortByValues(treemap);

/* просматриваем новую карту, отсортированную с помощью Iterator */

set = TreeMap_triee_par_valeur.entrySet();
i = set.iterator();
// Показываем elements
while(i.hasNext()) {
Map.Entry entry = (Map.Entry)i.next();
System.out.print(entry.getKey() + " : ");
System.out.println(entry.getValue());
}

}
}

Execution

Перед сортировкой: 
1 : e4
2 : e5
3 : e1
4 : e3
5 : e2
После сортировки:
3 : e1
5 : e2
4 : e3
1 : e4
2 : e5

Список литературы:

Java Documentation - Comparator (JavaSE 8)