47 votes

Comment puis-je utiliser le java pour chaque boucle avec des classes personnalisées?

Je pense que la plupart des codeurs ont utilisé du code comme celui-ci:

 
ArrayList<String> myStringList = getStringList();
for(String str : myStringList)
{
   doSomethingWith(str);
}
 

Comment puis-je profiter de la pour chaque boucle avec mes propres classes? Y a-t-il une interface que je devrais implémenter?

52voto

Brian Agnew Points 143181

Vous pouvez implémenter Iterable .

Voici un exemple . Ce n'est pas le meilleur, car l'objet est son propre itérateur. Cependant, cela devrait vous donner une idée de ce qui se passe.

12voto

Tombart Points 4503

La version courte de la boucle for ( T représente mon type personnalisé):

 for (T var : coll) {
    //body of the loop
}
 

se traduit par:

 for (Iterator<T> iter = coll.iterator(); iter.hasNext(); ) {
    T var = iter.next();
    //body of the loop
}
 

et l'itérateur de ma collection pourrait ressembler à ceci:

 class MyCollection<T> implements Iterator<T> {

    public int size() { /*... */ }

    public T get(int i) { /*... */ }

    public Iterator<T> iterator() {
        return new MyIterator();
    }

    class MyIterator implements Iterator<T> {

        private int index = 0;

        public boolean hasNext() {
            return index < size();
        }

        public type next() {
            return get(index++);
        }

        public void remove() {
            throw new UnsupportedOperationException("not supported yet");

        }
   }
}
 

8voto

Pierre Points 15256

Vous devez implémenter l' interface Iterable, c'est-à-dire que vous devez implémenter la méthode

 class MyClass implements Iterable<YourType>
{
Iterator<YourType> iterator()
  {
  return ...;//an iterator over your data
  }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X