Vous pouvez créer votre propre mise en œuvre de l' Iterator
interface qui effectue une itération sur les itérateurs:
public class IteratorOfIterators implements Iterator {
private final List<Iterator> iterators;
public IteratorOfIterators(List<Iterator> iterators) {
this.iterators = iterators;
}
public IteratorOfIterators(Iterator... iterators) {
this.iterators = Arrays.asList(iterators);
}
public boolean hasNext() { /* implementation */ }
public Object next() { /* implementation */ }
public void remove() { /* implementation */ }
}
(Je n'ai pas ajouté les génériques de l'Itérateur pour des raisons de concision.) La mise en œuvre n'est pas trop dur, mais n'est pas le plus trivial, vous avez besoin de garder une trace de ce qui Iterator
vous êtes actuellement à parcourir, et en appelant next()
vous aurez besoin pour effectuer une itération aussi loin que vous pouvez à travers les itérateurs jusqu'à ce que vous trouver un hasNext()
qui renvoie true
, ou vous pouvez frapper la fin de la dernière itérateur.
Je ne suis pas au courant de toute mise en œuvre qui existe déjà pour cela.
Mise à jour:
J'ai jusqu'-voté Andrew Duffy réponse - pas besoin de ré-inventer la roue. J'ai vraiment besoin de regarder dans la Goyave plus en profondeur.
J'ai ajouté un autre constructeur pour un nombre variable d'arguments - presque arriver hors sujet, de la façon dont la classe est construit ici n'est pas vraiment d'intérêt, tout le concept de la façon dont il fonctionne.