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 :

Enlever doublon liste hashMap


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
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Par défaut Enlever doublon liste hashMap
    Bonjour à tous,

    J'aimerais supprimer tous les doublons sur une liste de HashMap
    Voici ce que j'ai fait :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    SortedSet hashmapSet =  new  TreeSet (
           new Comparator() {
              public int compare (Object a, Object b) {return (
                                                                (StringUtils.defaultString(((LinkedHashMap)a).get("NOM").toString()).compareTo(StringUtils.defaultString(((LinkedHashMap)b).get("NOM").toString())))               
                                                               +
                                                                (StringUtils.defaultString(((LinkedHashMap)a).get("TEL_PRO").toString()).compareTo(StringUtils.defaultString(((LinkedHashMap)b).get("TEL_PRO").toString())))               
                                                               );
                                                       }        
     
                             }  
                                   );
     
     
         LinkedHashMap essai = new LinkedHashMap();
         essai.put("NOM","D");
         essai.put("TEL_PRO","1");
         hashmapSet.add(essai);
         essai.put("NOM","TOTO");
         essai.put("TEL_PRO","1");
         hashmapSet.add(essai);
         essai.put("NOM","D");
         essai.put("TEL_PRO","1");
         hashmapSet .add(essai);
         essai.put("NOM","TITI");
         essai.put("TEL_PRO","2");
         hashmapSet.add(essai);
         essai.put("NOM","D");
         essai.put("TEL_PRO","2");
         hashmapSauv.add(essai);
       List listsansdoublon = new ArrayList( hashmapSet );
     for(int i=0;i<listsansdoublon.size();i++){
            LinkedHashMap hinter = (LinkedHashMap) listsansdoublon.get(i);     
            System.err.println("sans doublon "+hinter);
    }
     
    // m'affiche uniquement le dernier
    Merci de votre aide

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Par défaut
    Salut,

    Peut être parce que tu gardes la même instance de "essai" à chaque ajout dans "hashmapSet".
    Essaye en créant une nouvelle LinkedHashMap à chaque fois.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Par défaut
    merci de ton aide mais j'ai l'impréssion qu'il fait la comparaison uniquement sur la key NOM alors que je désirerais de la faire sur la key NOM et TEL_PRO

    Voici le résultat qu'il me donne :
    sans doublon {NOM=D, TEL_PRO=1}
    sans doublon {NOM=TITI, TEL_PRO=2}
    sans doublon {NOM=TOTO, TEL_PRO=1}

    Il manque donc cette Map
    essai.put("NOM","D");
    essai.put("TEL_PRO","2");

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Par défaut
    T'as essayé en changeant la forme de ta condition dans le Comparator ?
    D'ailleur si je ne dis pas de bétise celle-ci a un défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public int compare (Object a, Object b) {return (
         StringUtils.defaultString(((LinkedHashMap)a).get("NOM").toString()).compareTo(StringUtils.defaultString(((LinkedHashMap)b).get("NOM").toString())))
          +
         (StringUtils.defaultString(((LinkedHashMap)a).get("TEL_PRO").toString()).compareTo(StringUtils.defaultString(((LinkedHashMap)b).get("TEL_PRO").toString())))               
                                                               );
     }
    Si les deux conditions renvoient des résultats opposés, les deux éléments seront considérés comme idéntiques, alors qu'ils ne le sont pas.

    Essaye peut être avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (condition1 == 0) ? condition2 : condition1
    Autrement dit, si les NOM sont égaux regarder les TEL_PRO sinon retourner le premier résultat

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Par défaut
    ca marche, merci chef

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 119
    Par défaut
    Bonjour,
    je ne pense pas que ce soit une bonne façon de faire. Quand tu modifies essai, tu modifies la map qui est dans ton SortedSet puisque c'est la même.
    Si tu pouvais essayer d'expliquer ce que tu souhaites faire, on pourrait te donner une solution meilleure.
    Typiquement, si tu souhaites associer un nom et un numéro de téléphone, fais une classe Personne ayant un attribut nom et un attribut numeroDeTelephone.

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

Discussions similaires

  1. Enlever doublons d'une liste un peu spéciale
    Par Norris dans le forum Framework .NET
    Réponses: 7
    Dernier message: 13/12/2012, 18h58
  2. [Stockage] String, Object, List, HashMap
    Par gojira dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/06/2010, 01h17
  3. [AC-2003] Enlever doublons suivant critère
    Par LYPACAN dans le forum Access
    Réponses: 1
    Dernier message: 12/03/2010, 16h56
  4. Enlever doublons 2 champs
    Par martinfa dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/11/2008, 01h41
  5. MySQL enlever doublons dans table
    Par MCSalsa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/06/2007, 21h18

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