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 :

supprimer dans une arrayList


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 285
    Par défaut supprimer dans une arrayList
    bonjour ,
    je cherche à supprimer une personne selon un nom , mais ça ne marche pas quand je met une condition sur le champs s'il est vide ou pas ( lignes en rouge), lorsque j'enlève les conditions ça marche :
    méthode pour supprimer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public  static void supprimer(String n)
        {
            for(int i=0 ; i <lp.size() ; i++)
            {
     
                    lp.remove(lp.get(i).getNom());  
                    lp.remove(lp.get(i).getPrenom());
                    lp.remove(lp.get(i).getAdresse());
                    lp.remove(lp.get(i).getDateNaissance()); 
            }
        }
    code du bouton supprimer :

    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
        private void btnSuppActionPerformed(java.awt.event.ActionEvent evt) {                                        
          JOptionPane j = new JOptionPane();
          
               String n= jNom.getText();
                if(n.equals("")){   j.showMessageDialog(null,"CHAMP VIDE","confirmation", JOptionPane.ERROR_MESSAGE);
                }
    else    if(!n.isEmpty())   
                {
                    int op= j.showConfirmDialog(null,"choisie une réponse","oui,Non",JOptionPane.YES_NO_OPTION , JOptionPane.QUESTION_MESSAGE);
                    if (op == JOptionPane.OK_OPTION)
                    {
                           Stockage.supprimer(n);
                           j.showMessageDialog(null,"personne  "+n+" Supprimée","confirmation", JOptionPane.INFORMATION_MESSAGE);
                    } 
             }               
        }
    merci

  2. #2
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Par défaut
    D'abord, tu n'as besoin de else if : à partir du moment où tu y mets exactement le contraire de la condition du if, le else suffit. Ensuite, pour tester si la chaine est vide il vaut mieux utiliser le isEmpty() puisqu'il est fait pour ça (il renvoit true quand la longueur de ta chaine est == à 0). Et tant qu'à faire, utiliser la fonction trim() qui permet d'enlever les espaces en début et fin de chaine. Du coup, si tu a une chaine qui ne contient que des espaces vides, elle sera aussi considérée comme vide (si tu veux aussi en tenir compte pour ta suppression bien sur ^^).

    Donc, essaie avec une condition comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(n.trim().isEmpty()) {
    //code si n est vide
    } else {
    //code si n n'est pas vide
    }

  3. #3
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 285
    Par défaut
    ça ne change rien ça reste presque le même code

  4. #4
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Par défaut
    Bah oublier un ; change pas beaucoup le code non plus et pourtant ça retourne quand même une erreur qui empêche le code de fonctionner...

    Après, j'avoue que j'ai pas regardé ce que tu as mis dans ton if et ton else if donc il y a peut-être des erreurs là aussi (comme tu as dit que ça fonctionnait sans la condition, je m'y suis pas attardé), mais ce que je t'ai posté est propre et fonctionne.

    Après, si tu vois pas ce que ça change, tu peux toujours demander ce qu tu comprends pas^^

  5. #5
    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
    Ta méthode pour supprimer ne peut pas fonctionner:
    - tu passes un paramètre que tu n'utilises pas
    - ta liste contient des objets (dont j'ignore le nom, mais qui ne sont pas des String) et tu demandes de faire un remove en passant getNom, getPrenom, getAdresse : ça ne supprimera jamais rien !

    Ce qu'il faudrait faire, c'est ça (si tu veux pouvoir supprimer n'importe quoi dès qu'il y a la moindre correspondance sur un des champs)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public  static void supprimer(String n){
            boolean remove = false;
            for(int i=0 ; i <lp.size() ; i++) {
                    remove = lp.get(i).getNom().equals(n); // test si le nom est identique
                    remove |= lp.get(i).getPrenom().equals(n); // test si le nom est identique
                    remove |= lp.get(i).getAdresse().equals(n); // test si l'adresse est identique
                    remove |= lp.get(i).getDateNaissance().equals(n); // test si la date de naissance est identique
                    if (remove){
                           lp.remove(lp.get(i));
                    }
            }
        }
    Il vaudrait mieux passer par un Iterator et utiliser la fonction remove sur l'iterator celà-dit.


    Et change le test sur le champ saisi comme indiqué par samlek989

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 279
    Par défaut
    Ta liste contient un ensemble d'objets.

    Quand tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lp.remove(lp.get(i).getNom());
    ca fait quoi ?

    Pour supprimer un element de la liste, il faudrait passer l'index de l'element a supprimé dans la méthode remove comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lp.remove(index_element_a_supprimer)

  7. #7
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2012
    Messages : 285
    Par défaut
    c'est fait merci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       public  static void supprimer(String n)
        {
            for(int i=0 ; i <lp.size() ; i++)
            {
                  if(n.equals(lp.get(i).getNom())) 
                {
                    lp.remove(i);
                  }
            }
        }

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,
    Citation Envoyé par Kagami Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public  static void supprimer(String n)
        {
            for(int i=0 ; i <lp.size() ; i++)
            {
     
                    lp.remove(i);
            }
        }
    ça supprime toute ma liste sauf la personne que je choisis .
    Je dirais à priori que ça supprime plutôt 1 élément sur 2 ( remove(i) supprime l'élément d'index i, donc toute la liste se décale vers le début, donc le suivant d'index i+1 devient celui d'index i, et comme i++, on ne traite jamais le suivant de celui qu'on supprime).

    Mais demande-toi pourquoi tu n'utilises jamais nulle part le paramètre de la méthode, alors qu'il est censé te permettre de référencer l'élément à supprimer... Comment veux-tu que ce paramètre soit pris en compte si tu ne l'utilises nulle part ?

    fait comme @eulbobo t'a dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(Iterator<...> iterator = lp.iterator(); iterator.hasNext(); ) {
     
        if( condition( iterator.next(), n ) ) {
            iterator.remove();
        }
     
    }
    avec condition( element, n) la fonction qui détermine si l'élément correspond à ton paramètre (et tu remplaces les ... parce qu'il faut, et qu'on ne peut deviner.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Parcourir et supprimer un objet dans une ArrayList
    Par Eausport dans le forum Collection et Stream
    Réponses: 32
    Dernier message: 03/08/2012, 10h28
  2. Supprimer efficacement plusieurs entrées dans une ArrayList
    Par Djakisback dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 15/02/2011, 02h26
  3. [Collections]enlever des éléments répétés dans une ArrayList
    Par apan dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 23/03/2006, 13h28
  4. [C#] Tri d'objet dans une ArrayList
    Par guillaume16 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/03/2006, 12h05
  5. [Collections]Supprimer des doublons dans une ArrayList
    Par emie31 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2005, 15h15

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