IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Trier un TreeMap avec sa valeur


Sujet :

Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 172
    Points : 0
    Points
    0
    Par défaut Trier un TreeMap avec sa valeur
    Bonjour,

    Je souhaite trier une TreeMap avec sa valeur de type string mais j'obtiens une erreur de compilation dans cette ligne TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>(descendingEmployeeNameComparator); (ligne 11)

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    import java.util.Comparator;
     
    public class DescendingEmployeeNameComparator implements Comparator<String> {
     
    	@Override
    	public int compare(String empName1, String empName2) {
    		return empName1.compareToIgnoreCase(empName2);
    	}
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    import java.util.Comparator;
    import java.util.TreeMap;
     
    public class TreeMapExample {
    	public static void main(String[] args) {
     
    		Comparator<String> descendingEmployeeNameComparator = new DescendingEmployeeNameComparator();
     
    		TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>(descendingEmployeeNameComparator);
     
    		treeMap.put(20, "Balu");
    		treeMap.put(10, "Ajay");
    		treeMap.put(40, "Carol");
    		treeMap.put(30, "Dave");
     
    		System.out.println("treeMap : " + treeMap + "\n");
     
    		Comparator<?> comparator = treeMap.comparator();
     
    	}
    }

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    Ahhh !! C'est trier, pas tirer... Je me disais aussi
    Pourrais-tu nous montrer l'erreur ?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 172
    Points : 0
    Points
    0
    Par défaut
    lol , j'ai modifié le titre

    J'ai une erreur de compilation .

    eclipse me propose deux solutions : (aucune ne marche)

    Comparator<? super Integer>
    descendingEmployeeNameComparator = new
    DescendingEmployeeNameComparator();


    Comparator<? super Integer>
    descendingEmployeeNameComparator = new
    DescendingEmployeeNameComparator();

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    Le TreeMap se base sur la valeur de la clé pour trier son contenu. La clé définie ici est de type Integer, mais le comparateur que tu utilises est un comparateur de String. Donc cela ne peut pas marcher. Tu dois donc utiliser un comparateur d'entiers.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 172
    Points : 0
    Points
    0
    Par défaut
    Mais moi je ne veux pas trier avec les clés , je veux trier les valeurs de types String.

    avez vous une idée coment je peux faire ?

    Merci

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par ghir_ana Voir le message
    avez vous une idée coment je peux faire ?
    Une List au lieu d'une Map ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 172
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Non moi je cherche à utilisé un TreeMap .

    une aide svp

    Merci

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par ghir_ana Voir le message
    Mais moi je ne veux pas trier avec les clés , je veux trier les valeurs de types String.

    avez vous une idée coment je peux faire ?

    Merci
    Avec une TreeMap, ce ne sera pas possible, la treemap est triée par clé, point.
    Pourquoi as tu besoin besoin de trie par valeur? Ce n'est pas courant comme besoin et ça ressmelbe plus à un problème de designe, genre tu aurais inversé dans ton design la clé et la valeur.

    Sinon, je ne connais pas d'implémentation de Map qui trie par valeur donc tu va être bon, je pense, pour faire ta propre implémentation...

    Si la Map n'évolue pas dans le temps, une solution simple serait de partir d'un Map non triée, de récupérer sont entrySet, de le trier dans une nouvelle List<EntrySet<Integer,String>>, et d'utiliser cette liste pour reconstruire une LinkedHashMap<Integer,String> qui, elle, aura l'ordre en question lors de l'itération.

  9. #9
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Le TreeMap est ordonné sur la clé, et non sur la valeur.

    Si tu veux obtenir la valeur de manière triée, tu peux récupérer une Collection de valeurs ( treeMap.values() ), qu'il faudra ajouter dans une liste avant de pouvoir la classer.
    Maintenant, si tu veux classer les valeurs, je pense que tu veux aussi garder le lien vers les identifiants qui permettent de les classer.

    Une bonne solution serait de créer un Object contenant ton Integer, ton String, étendre les méthodes hashCode et equals, et faire implémenter Comparable.
    Tu n'auras plus qu'à ajouter tes objets à un TreeSet (qui permettra de garantir l'unicité si tu as bien implémenté hashcode et equals)
    Je ne suis pas mort, j'ai du travail !

Discussions similaires

  1. [XL-2003] Trier combobox avec des valeurs numériques sans doublon
    Par goldfinger13 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/02/2012, 20h31
  2. requete avec la valeur NULL
    Par Hinkel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/11/2008, 16h39
  3. Trier une colonne avec des valeurs numériques ou textes
    Par jfc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/02/2006, 11h15
  4. Trier une table avec valeur de differentes unités
    Par Sydaze dans le forum Bases de données
    Réponses: 8
    Dernier message: 01/06/2005, 11h43
  5. Réponses: 6
    Dernier message: 04/04/2003, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo