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 :

[Problèmes avec ArrayList] Supprimer des objets égaux à null


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut [Problèmes avec ArrayList] Supprimer des objets égaux à null
    Bonjour j'ai toutes les peines du monde à éliminer des objets null dans une arraylist. Pour éssayer de supprimer des objets égaux à null j'ai éssayé les combinaisons suivantes :

    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
     
    List<String> uneListe= new ArrayList<String>();
    		/*
    		Aprés je remplis la liste par des éléments provenant de notre base de données
    		*/
     
    		//Pour supprimer les objets null je fais ceci :
     
    		if(uneListe!=null && uneListe.size()>0)
    		for(int j=0;j<uneListe.size();j++)
    		{
    		 if(uneListe.get(j).equals(null))
    		 {
    			uneListe.remove(j); 
    		 }
    		}
     
    		for(int j=0;j<uneListe.size();j++)
    		{
    		 if(uneListe.get(j)==null)
    		 {
    			uneListe.remove(j); 
    		 }
    		}
     
                //Affichage
    		for(int j=0;j<uneListe.size();j++)
    		{
    			System.out.println(uneListe.get(j));
    		}
    Alors la chose extroardinaire quand j'utilise l'invite commande, j'ai l'affichage des éléments sans les objets égaux à null.
    Pourtant quand j'utilise larraylist avec les jsp, dans le mode débug d'Eclipse, on a toujours toujours des éléments null présent dans la liste.
    Existe-t-il des solutions pour éliminer des objets null, j'ai éssayé trimToSize() et removeAll(Collections.singleton(null)); cependant les objets null sont toujours présents dans la liste. Je ne parviens pas corriger cette anomolie.


    Bien à vous

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    • Il est préférables d'utiliser un Iterator pour parcourir une liste, en particulier si on doit supprimer des éléments pendant son parcours !
    • Le debug d'eclipse affiche des détails de l'implémentation d'une liste, ce qui ne représente pas forcément son contenu exact.



    a++

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    • Le debug d'eclipse affiche des détails de l'implémentation d'une liste, ce qui ne représente pas forcément son contenu exact.



    a++
    Merci pour votre réponse, en fait c'est ce que j'étais entrain de me dire, je n'osais pas en venir à ce genre de conclusion, parce que je me disais que c'est peut être moi, qui ne connait pas assez Java et Eclipse.
    De toute façon mon programme semble marcher, malgrés ce que je vois avec le debugger.

    Bien à vous.

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Juste une petite remarque sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(uneListe.get(j).equals(null))
    Jamais de méthode "equals" pour comparer un objet à null. Si l'objet est effectivement null, la comparaison ne renvoie pas "true" mais lève une NullPointerException !

    (je ne comprends d'ailleurs pas comment tu as fait pour y échapper jusqu'à maintenant...)

    C'est exactement le contraire d'une chaîne de caractères : la comparaison à null s'effectue toujours avec "==".

    Sinon, j'approuve : pour un parcours avec suppression, c'est un iterator qu'il faut utiliser.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Je me permets de citer la javadoc :
    For any non-null reference value x, x.equals(null) should return false.
    La spécification indique donc que le NullPointerException n'est pas une option ici. D'ailleurs ce genre de code serait foireux si ton cas était avéré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String s = null;
    ... // Plein de code, mais pas d'attribution à s.
    if ("a".equals(s)) { // ne DOIT pas lancer de NullPointerException : DOIT retourner false !
      ...
    }
    Ceci dit, je soutiens le test '==' pour null, ou le 'instanceof' dans le cadre d'implémentation de la méthode équals pour vérifier si un objet est null. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MaClasse {
      private int x;
      public boolean equals (Object obj) {
        if (obj instanceof MaClasse) { // Renvoie false si obj est null
          MaClasse that = (MaClasse)obj;
          return this.x == that.x;
        }
        return false;
      }
    }

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut
    OK merci à tous pour vos trés précieux conseils.
    Bien à vous

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/10/2012, 18h35
  2. Réponses: 14
    Dernier message: 04/10/2012, 13h14
  3. [eZ Publish] Problème pour supprimer des objets de la corbeille
    Par azrael62 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 01/10/2012, 15h18
  4. Réponses: 10
    Dernier message: 10/10/2009, 18h39
  5. problème avec la persistance des objets
    Par gentil dans le forum Hibernate
    Réponses: 15
    Dernier message: 04/04/2007, 11h44

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