filtrer une collection

filtrer une collection - Java - Programmation

Marsh Posté le 13-12-2009 à 22:42:43    

Pour filtrer une collection je trouve ce code partout :

Code :
  1. static void filter(Collection c)
  2. {
  3.   for (Iterator it = c.iterator() ; it.hasNext(); )
  4.     if (!cond(it.next()))
  5.       it.remove();
  6. }


mais je ne comprends pas pourquoi on retire (remove) un élément quand son suivant (next) ne remplit pas une condition...
si cet élément suivant (next) ne remplit pas la condition pourquoi on ne retire pas celui-là ?...
merci pour toute réponse

Reply

Marsh Posté le 13-12-2009 à 22:42:43   

Reply

Marsh Posté le 13-12-2009 à 22:53:15    

it.next() te renvoie l'Object suivant de ton Iterator (qui n'a donc jamais été renvoyé). et it.remove() enlève le dernier Object renvoyé par it.next() (tu dois donc toujours appeler next() avant d'éventuellement appeler remove()).


Message édité par Harkonnen le 13-12-2009 à 22:53:27

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-12-2009 à 21:58:53    

C'est pourtant écrit dans la documentation de Iterator...

Reply

Marsh Posté le 15-12-2009 à 00:09:53    

Harkonnen et cbeyls
merci de vos réponses,
ce code est dans les cours tel que j'ai copié et j'ai du mal avec !
est-ce que je peux le raisonner comme ça :  

Code :
  1. je crée le curseur;
  2. tant il y a un élément suivant;
  3. si ma condition n'est pas vrai;
  4. je vais au suivant;
  5. et je supprime celui sur lequel le curseur était (avant de passer sur le suivant !);


si cette interprétation est correcte je suis sauvée sinon le tablier va pas tarder à se rendre !!!

Reply

Marsh Posté le 15-12-2009 à 09:21:54    

Pourquoi tu passes au suivant si ta condition n'est pas vraie ? Si elle n'est pas vraie, alors tu supprimes l'élément précédemment lu et voila !
Le code que tu as posté au début est parfaitement correct, et parfaitement compréhensible. Regarde donc la doc de Iterator, elle est des plus limpides : http://java.sun.com/j2se/1.4.2/doc [...] rator.html


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-12-2009 à 14:40:39    

merci de ta réponse,
 
la syntaxe que j'ai copié c'est dans les cours classique pour filtrer une collection, je l'interprétais mal et c'est pourquoi je ne comprenais pas : ça arrive souvent quand on est débutant  :pt1cable:
 
je n'avais pas compris que le curseur va d'abord sur l'élément et le teste se fait par la suite ....
 
et finalement je garde le tablier car j'ai fini par comprendre le truc !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed