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 :

[TreeSet] Action sur Element lorsque Doublon


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de CPI_en_mousse
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 332
    Par défaut [TreeSet] Action sur Element lorsque Doublon
    Bonjour à tous,

    Je souhaiterais qu'un Boolean contenu dans l'objet du TreeSet change d'état lorsque j'essaie d'ajouter un objet identique.

    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
     
    public class CommuneDto implements Comparable<CommuneDto> {
        private String code;
        private String libelle;
        private Boolean indicActif;
     
    @Override
        public boolean equals(Object o) {
            if (o == null || getClass() != o.getClass()){
                return false;
            }
     
            CommuneDto commune = (CommuneDto) o;
            if (this.getCode().equals(commune.getCode()) && this.getLibelle().equals(commune.getLibelle())) {
                return true;
            }
     
            return false;
        }
     
        @Override
        public int hashCode() {
            return code.hashCode() + libelle.hashCode();
        }
     
        /* (non-Javadoc)
         * @see java.lang.Comparable#compareTo(java.lang.Object)
         */
        @Override
        public int compareTo(CommuneDto o) {
            return this.getCode().compareTo(o.getCode());
     
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set listeCommune = new TreeSet<CommuneDto>();
    listeCommune.add(competenceGeographiqueService.chargerCommune(codeCommune));
    Je ne sais pas si je suis très clair, lorsque j'ajoute une commune à mon treeSet et que cette commune existe déjà dans ce treeSet, je voudrais que indicActif soit vrai.
    Je ne vois pas comment faire avec un treeSet.
    J'avais pensé à inclure la mise à jour du boolean dans les methode hashCode ou equals que j'ai redéfini. Est une bonne idée?
    Si c'est pas possible, je passerai par une arrayList mais je devrai gérer les doublons à la main.

    Si quelqu'un à une idée sur comment faire....

    Merci pour vos réponses

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Citation Envoyé par CPI_en_mousse Voir le message
    J'avais pensé à inclure la mise à jour du boolean dans les methode hashCode ou equals que j'ai redéfini. Est une bonne idée?
    Non, pas bonne idée !

    Pourquoi ne pas plutôt utiliser HashMap en plus?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Set listeCommune = new TreeSet<CommuneDto>();
    CommuneDto myCommune = competenceGeographiqueService.chargerCommune(codeCommune);
    if (listeCommune.add(myCommune)){
         mapCommunes.put(codeCommune, myCommune);
    } else {
         mapCommunes.get(codeCommune).setIndicActif(Boolean.TRUE);
    }
    Ca implique juste d'avoir une HashMap<String, CommuneDto> qui stocke les liens vers les instances de commune dans ton TreeSet, et de créer un setter de indicActif


    (la méthode add renvoie true seulement si l'élement a été ajouté au Set)

  3. #3
    Membre éclairé
    Avatar de CPI_en_mousse
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 332
    Par défaut
    bon au final j'ai fait quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
            if (!competenceGeographiqueBacking.getSetCommunePersonne().add(communeAjout)) {            
                competenceGeographiqueBacking.getSetCommunePersonne().forEach(commune -> {
                    if (commune.equals(communeAjout)) {
                        commune.setIndicActif(Boolean.TRUE);
                    }
                });
            }

    Merci pour ton aide eulbobo.

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    C'est une solution qui marche aussi !
    J'espère juste que tu n'auras pas trop d'éléments dans ton set parce le parcourir en entier à chaque fois quand un seul élément doit être mis à jour, ça peut vite être long.

  5. #5
    Membre éclairé
    Avatar de CPI_en_mousse
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 332
    Par défaut
    du coup j'ai optimisé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            Predicate<CommuneDto> predicate = commune -> commune.equals(communeAjout);
            if (!competenceGeographiqueBacking.getSetCommunePersonne().add(communeAjout)) {
                competenceGeographiqueBacking.getSetCommunePersonne().stream().filter(predicate).forEach(commune -> {
                    if (commune.equals(communeAjout)) {
                        commune.setIndicActif(Boolean.TRUE);
                    }
                });
            }

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut


    Y'a pas à dire, c'est beau ce qu'on peut faire en Java8 !

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

Discussions similaires

  1. [XL-2007] Action sur les doublons ?
    Par neox_mimi dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/10/2010, 14h39
  2. Réponses: 3
    Dernier message: 06/04/2010, 11h56
  3. [intput] action par défaut lorsqu'on appuit sur "Enter&
    Par pmartin8 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 25/10/2005, 18h45
  4. Pb d'action sur un clip
    Par bencasp dans le forum Flash
    Réponses: 4
    Dernier message: 22/10/2003, 17h11
  5. [Flash MX] Action sur un bouton
    Par WriteLN dans le forum Flash
    Réponses: 9
    Dernier message: 20/10/2003, 14h01

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