ejemplo: iterador sobre otro iterador
El siguiente ejemplo es una clase que trabaja
sobre una serie de números, dejando pasar sólo aquellos que son múltiplos de N.
Para ello necesita consumir varios datos de entrada en cada paso, hasta que
encuentra un número que valga o se acabe la lista de entrada.
class FiltraMultiplos implements
Iterator<Integer> |
public class FiltraMultiplos implements Iterator<Integer> {
private final Iterator<Integer> entrada;
private final int n;
private boolean hayMas;
private Integer siguiente;
public FiltraMultiplos(Iterator<Integer> entrada, int n) {
this.entrada = entrada;
this.n = n;
calculaSiguientePaso();
}
private void calculaSiguientePaso() {
while (true) { hayMas = entrada.hasNext(); if (!hayMas) break; siguiente = entrada.next(); if (siguiente % n == 0) break; }
}
public boolean hasNext() { return hayMas;
}
public Integer next() { if (!hayMas) throw new NoSuchElementException();
Integer devolver = siguiente;
calculaSiguientePaso();
return devolver;
}
public void remove() { throw new UnsupportedOperationException(); } } |
Temas relacionados
21. Iterator<E> (interface) java.util.Iterator<E>