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 doublons


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 139
    Par défaut TreeMap et doublons
    Bonjour à tous,
    j'ai un problème avec les TreeMap, mais différent de ce qu'on peut trouver habituellement, c'est à dire que je voudrais garder les doublons et non pas les supprimer.
    Voila un peu plus d'explication :
    Je travaille sur des chambres dans un immeuble, l'utilisateur peut ajouter des chambres et en ajouter deux avec la même désignation (exemple : "chambre231", "chambre231","chambre240","chambre250"). J'ai pour réstriction d'utiliser forcément un TreeMap, qui doit être trié selon la désignation.
    Voici donc comment je m'y prend :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TreeMap listeOccupationChambre = new TreeMap(new CompChambreAsc());
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static class CompChambreAsc implements Comparator {
     
    		public int compare(Object o1, Object o2){
     
    			if(o1 == null && o2 == null) return 0;
    			if(o1 == null) return -1;
    			if(o2 == null) return -1;
     
    		    return ((Chambre)o2).getDesignation().compareTo(((Chambre)o1).getDesignation());
    		  }
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chambre zoneTmp = (Chambre) iterSet2.next();
    listeOccupationChambre.put(zoneTmp)
    Tout marche donc trés bien sauf qu'il me vire tous les doublons, ce qui est normal puisque mon comparator est sur la "désignation"...Bref comment faire pour obtenir le même résultat trié, mais avec les doublons, en utilisant le même TreeMap ?
    Merci beaucoup

  2. #2
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    je pense pas que c est possible de garder les doublons dans un TreeMap.
    Est ce qu il n y a pas d autre criteres pour comparer tes chambres? ainsi deuc chambres peuvent avoir le meme nom chambre250 mais un autre identifiant unique.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 139
    Par défaut
    Oui bien sur elles ont toutes un identifiant...seulement le compareTo permet de trier le TreeMap...A chaque "put" la méthode compare est appellé pour rajouter l'élément au bon endroit...Si je met dans le compare les identifiants à la place des désignations il me les classera par identifiant et ce n'est pas ce que je veux

  4. #4
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    Citation Envoyé par pafi76 Voir le message
    Oui bien sur elles ont toutes un identifiant...seulement le compareTo permet de trier le TreeMap...A chaque "put" la méthode compare est appellé pour rajouter l'élément au bon endroit...Si je met dans le compare les identifiants à la place des désignations il me les classera par identifiant et ce n'est pas ce que je veux
    ah j ai compris, j ai fait un truc similaire, j avais a comparer les elements d une List.
    je fais la comparaison sur Element.attribut1 au debut s ils sont egaux je passe au deuxieme elements.

    mais je sais pas si ca va marcher sur un TreeMap.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Par défaut
    Bonjour,

    Sauf erreur de ma part la méthode put de TreeMap prend en paramètres une clef et une valeur.
    Cette ligne : listeOccupationChambre.put(zoneTmp); ne doit donc pas compiler.
    Quelle est la clef ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 139
    Par défaut
    oups oui pardon j'étais en train de modifier le put lors du copier/coller :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeOccupationChambre.put(zoneTmp, lTmp); //avec lTmp la liste de mes chambres

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Par défaut
    Eh bien tu viens de trouver la réponse. A une dénomination tu associes une liste de chambres au lieu d'une chambre unique.

  8. #8
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    bonjour, on peut trier sur la désignation ET sur l'id, ça doit fonctionner:
    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
    public static class CompChambreAsc implements Comparator {
     
    		public int compare(Object o1, Object o2){
     
    			if(o1 == null && o2 == null) return 0;
    			if(o1 == null) return -1;
    			if(o2 == null) return +1;// pour rester commutatif
     
    		    int l_result =((Chambre)o2).getDesignation().
                           compareTo(((Chambre)o1).getDesignation());
                        if (result!= 0) return result;
                        //même désignation, mais les id doivent toujours être différents => resultat toujours != 0.
                       return ((Chambre)o2).getId().compareTo(((Chambre)o1).getId());
    		  }
    	}

  9. #9
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    Citation Envoyé par deltree Voir le message
    bonjour, on peut trier sur la désignation ET sur l'id, ça doit fonctionner:
    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
    public static class CompChambreAsc implements Comparator {
     
    		public int compare(Object o1, Object o2){
     
    			if(o1 == null && o2 == null) return 0;
    			if(o1 == null) return -1;
    			if(o2 == null) return +1;// pour rester commutatif
     
    		    int l_result =((Chambre)o2).getDesignation().
                           compareTo(((Chambre)o1).getDesignation());
                        if (result!= 0) return result;
                        //même désignation, mais les id doivent toujours être différents => resultat toujours != 0.
                       return ((Chambre)o2).getId().compareTo(((Chambre)o1).getId());
    		  }
    	}
    ouai c est ce que j ai fait mais avec des listes a toi de evoir si cava marcher aevec ton TreeMap

  10. #10
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    bonjour, il y a quelque chose que je ne comprends pas, logiquement "deux emplacement" de la treemap pointé avec deux clés différentes peuvent trés bien avoir le meme objet ? non ?
    alors a moins que je n'ai absolument rien compris a ce que tu veux faire (c'est qui est une éventualité plus que probable ) je ne comprends pas ou est ton probleme...

Discussions similaires

  1. [TreeMap] Connaitre les doublons
    Par kenny49 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 15/09/2007, 11h26
  2. Réponses: 2
    Dernier message: 19/08/2003, 18h04
  3. tri a bulle sans les doublons
    Par comme de bien entendu dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/03/2003, 16h29
  4. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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