Java - Trier une TreeMap par valeurs avec Comparator
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) {
ComparatorvalueComparator = 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;
}
};
MapTreeMap_triee_par_valeur = new TreeMap (valueComparator);
TreeMap_triee_par_valeur.putAll(map);
return TreeMap_triee_par_valeur;
}
public static void main(String args[]) {
TreeMaptreemap = 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: