Tri d'un TreeMap par valeur
Introduction :
Dans un TreeMap, les éléments sont triés en fonction de leur ordre naturel, qui peut être les clés ou les valeurs, selon l'implémentation. Il est cependant possible de trier un TreeMap en fonction des valeurs de ses entrées à l'aide d'un comparateur.
Solution :
Vous ne pouvez pas trier directement un TreeMap par ses valeurs. La syntaxe que vous avez essayée avec le comparateur byValue est incorrecte.
Cependant, vous pouvez obtenir la fonctionnalité souhaitée en créant un SortedSet personnalisé qui contient les entrées du TreeMap. Ce SortedSet peut être créé à l'aide de la méthode inputsSortedByValues() :
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; }
Cette méthode prend une Map dont les valeurs sont Comparable et renvoie un SortedSet de Map.Entry trié par les valeurs des entrées.
Pour utiliser cette méthode :
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 sur Integer Égalité :
Lors de la comparaison de valeurs entières à l'aide de ==, il vérifie l'égalité des références, et non l'égalité des valeurs. Il est recommandé d'utiliser la méthode equals() pour comparer les valeurs entières pour l'égalité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!