Maison > Java > javaDidacticiel > Comment puis-je trier un TreeMap Java par ses valeurs plutôt que par ses clés ?

Comment puis-je trier un TreeMap Java par ses valeurs plutôt que par ses clés ?

Linda Hamilton
Libérer: 2024-12-16 19:46:15
original
180 Les gens l'ont consulté

How Can I Sort a Java TreeMap by Its Values Instead of Keys?

Tri TreeMap par valeur

Lorsque vous travaillez avec TreeMap de Java, le tri selon l'ordre naturel par défaut des clés peut ne pas toujours être suffisant. Cet article explore une approche alternative pour trier un TreeMap en fonction de ses valeurs.

Description du problème :

Vous cherchez un moyen de concevoir un comparateur qui vous permet de trier un TreeMap par ses valeurs au lieu de l'ordre des clés par défaut. Une première tentative a renvoyé une erreur, soulevant des questions sur la transmission de Map.Entry au comparateur.

Solution :

Bien qu'il ne soit pas possible de trier un TreeMap directement par valeurs, il est possible d'utiliser une collection externe pour effectuer cette tâche. En extrayant Map.entrySet(), vous pouvez utiliser un comparateur personnalisé pour trier les entrées en fonction de leurs valeurs.

La méthode générique fournie, inputsSortedByValues(), y parvient en créant un SortedSet d'objets Map.Entry . La méthode nécessite que les valeurs de la carte soient comparables et applique un comparateur qui compare les valeurs pour déterminer l'entrée commande.

Mise en œuvre :

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;  // Handle equal values separately
            }
        }
    );
    sortedEntries.addAll(map.entrySet());
    return sortedEntries;
}
Copier après la connexion

Utilisation :

    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}"
    System.out.println(entriesSortedByValues(map));  // prints "[C=1, B=2, A=3]"
Copier après la connexion

Attention :

La modification de l'ensemble trié ou de la Map.Entry à l'intérieur peut entraîner des résultats inattendus, car ce n'est pas une "vue" de la carte originale. De plus, veillez à utiliser == avec des objets Integer, car il effectue une égalité de référence et non une égalité de valeur.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal