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

Collection et Stream Java Discussion :

TreeMap et comparator


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 53
    Points
    53
    Par défaut TreeMap et comparator
    Bonjour,
    je travaille sous java 1.4 et j'essaie d'implémenter une TreeMap avec un comparator comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TreeMap messages = new TreeMap(new MessagesComparator());
    for (boucle...) {
          messages.put(cle, valeur);
    }
    Le problème est le suivant : certaines clés disparaissent avec le comparator. Si par exemple j'insère dans la map 10 clés/valeurs, la plupart disparaitront. Si j'enlève le Comparator, tout est là par contre (mais pas dans le bon ordre bien évidemment...).

    Au début j'ai pensé que c'était ma classe qui implément le Comparator qui était problématique, pourtant en débugguant on voit bien que toutes les clés ne sont pas comparées dans la méthode compare.

    D'ailleurs voici l'implémentation de la méthode compare au cas où :

    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
     
    public int compare(Object o1, Object o2) {	
    	int resultatComparaison = 0;
     
    	String cle1 = (String) o1; 
    	String cle2 = (String) o2; 
     
    	if (getPriorite(cle1) < getPriorite(cle2)) {
    		resultatComparaison = -1;
    	}
    	if (getPriorite(cle1) > getPriorite(cle2)) {
    		resultatComparaison = 1;
    	}
     
    	return resultatComparaison;
    }

    Une idée ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 53
    Points
    53
    Par défaut
    Indice, je viens de me rendre compte que le nom des clés joue un rôle.

    Les clés/valeurs dans la Map sont des String. La clé est composé d'une lettre et de chiffres et donne quelque chose comme E_15, E_119, W_13.

    Lorsqu'il y a deux fois la même lettre, il ne s'affichera que le dernier résultat : ici, on n'aura que E_119 et E_15 sera écrase.

    J'ai l'impression que cela agit comme si la première lettre de la clé devait être unique... mais je ne vois pas pourquoi ?

    Je continue à cherche mais là je patauge

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 53
    Points
    53
    Par défaut
    Bon j'ai trouvé. En fait le problème est tout bête en soi finalement.

    Dans une TreeMap, on ne peut avoir deux clés identiques. Or, quand je comparais avec ma fonction getPriorite(String) (que j'aurais du poster sur le forum...) je ne comparais que la première lettre ("E" ou encore "W") pour déterminer la priorité. il y avait donc des égalités qui gâchaient la validité de la comparaison.

    Le problème a été résolu en prenant en compte le nombre à côté de la lettre et en l'ajoutant dans la priorité (par exemple, si "E" a une priorité de 3, j'y ajoute 15 à partir de la clé E_15, ce qui fait que getPriorite retourne 18, en espérant être clair).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TreeMap] comparer et fusionner deux TreeMap
    Par LoLoSS dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 06/09/2004, 11h49
  2. [date] Comparer deux formats différents
    Par terziann dans le forum Requêtes
    Réponses: 17
    Dernier message: 21/07/2003, 15h21
  3. [LG][FAQ]comparer des fichiers
    Par lucke dans le forum Langage
    Réponses: 11
    Dernier message: 01/06/2003, 18h02
  4. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

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