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>