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 :

parcours ArrayList avec remove plusieurs éléments


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 35
    Par défaut parcours ArrayList avec remove plusieurs éléments
    Bonjour,

    J'utilise une arrayList dans laquelle il y un champ boolean qui permet de repérer les objets à enlever (remove). Ma question est, existe il un risque que le parcours de la liste + remove de plusieurs éléments pose problème avec les index (si je fais remove(0), le 1 deviendrait 0 et je passe directement au 2 devenu 1...!)? Quelle est la meilleure manière de traiter celà? Merci beaucoup.

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 12
    Par défaut
    Tu peux utiliser un Iterator pour faire ta boucle
    http://java.sun.com/j2se/1.4.2/docs/.../Iterator.html
    selon la doc, le problème que tu évoques ne se pose pas

    => http://java.sun.com/docs/books/tutor...ollection.html paragraphe "Traversing Collections", "Iterators"

  3. #3
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Par défaut
    problème fameux !!

    il faut quand tu parcours ta liste créer une autre liste pour que tu met les éléments voulu dans cette nouveau liste.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    est-ce que le remove est associé à l'élément à supprimer (un propriété de cet élément) ou est-ce que le remove est dans une liste à part.

    Dans le premier cas, tu fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (Iterator<X> i = list.iterator(); i.hasNext();){
        X x = i.next();
        if (x.toRemove())
          i.remove();
    }
    dans le second cas ce sera plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    List<type> list  =..... ; // liste à nettoyer
    List<Boolean> removeList =.....; //elements à enlever
    List<type> elementsToRemove = new ArrayList<type>();
    for (int i = 0; i< removeList.size(); i++)
        if (toRemove.get(i)==true)
           elementsToRemove.add(list.get(i));
    list.removeAll(elementsToRemove());

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 35
    Par défaut
    J'ai fait ceci et ca a l'aire de fonctionner. Donc juste pour être sur, est ce correct?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                    Person person=null;
                    ArrayList al=alObj;
                    Iterator itr=al.iterator();
                    while(itr.hasNext()){
                        pers=(Person) itr.next();
                        if(pers.isDeleted()){
                            itr.remove();
                        }
                    }
    Pour répondre à la dernière question, le delete est lié à une propriété dans l'objet (un boolean) pour savoir si l'objet doit ou pas être enlevé.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    mis à part une erreur dans le nom d'un variable, ca me semble correct.

Discussions similaires

  1. Parcours arrayList + remove object
    Par fasyr dans le forum Collection et Stream
    Réponses: 15
    Dernier message: 08/03/2009, 16h48
  2. Réponses: 5
    Dernier message: 03/03/2009, 09h47
  3. drag and drop avec plusieurs éléments
    Par yohan0262 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 17/09/2008, 12h57
  4. Parcours de liste avec suppression d'éléments
    Par biaggi dans le forum Langage
    Réponses: 2
    Dernier message: 11/09/2008, 10h00
  5. Réponses: 1
    Dernier message: 23/04/2008, 00h05

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