La collection TreeMap est par défaut triée avec ses clés, mais si vous avez besoin de trier TreeMap par valeurs alors Java fournit un moyen pour réaliser ça en utilisant la classe comparator.
Exemple:
package codeurjava; import java.util.*; class TreeMapSort { // Trier les éléments de TreeMap par valeurs 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(map); return 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("Avant le tri:"); /* parcourir la TreeMap non triée avec Iterator */ Set set = treemap.entrySet(); Iterator i = set.iterator(); // Afficher les éléments while(i.hasNext()) { Map.Entry entry = (Map.Entry)i.next(); System.out.print(entry.getKey() + " : "); System.out.println(entry.getValue()); } System.out.println("Après le tri:"); // appeler la méthode sortByvalues() Map TreeMap_triee_par_valeur = sortByValues(treemap); /* parcourir la nouvelle map triée avec Iterator */ set = TreeMap_triee_par_valeur.entrySet(); i = set.iterator(); // Afficher les éléments while(i.hasNext()) { Map.Entry entry = (Map.Entry)i.next(); System.out.print(entry.getKey() + " : "); System.out.println(entry.getValue()); } } }
Exécution
Avant le tri: 1 : e4 2 : e5 3 : e1 4 : e3 5 : e2 Après le tri: 3 : e1 5 : e2 4 : e3 1 : e4 2 : e5
Références:
Java Documentation - Comparator (JavaSE 8)