Java Language Creando tu propio iterable.


Ejemplo

Para crear su propio Iterable como con cualquier interfaz, simplemente implemente los métodos abstractos en la interfaz. Para Iterable solo hay uno que se llama iterator() . Pero su tipo de retorno Iterator es en sí mismo una interfaz con tres métodos abstractos. Puede devolver un iterador asociado con alguna colección o crear su propia implementación personalizada:

public static class Alphabet implements Iterable<Character> {

    @Override
    public Iterator<Character> iterator() {
        return new Iterator<Character>() {
            char letter = 'a';

            @Override
            public boolean hasNext() {
                return letter <= 'z';
            }

            @Override
            public Character next() {
                return letter++;
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException("Doesn't make sense to remove a letter");
            }
        };
    }
}

Usar:

public static void main(String[] args) {
    for(char c : new Alphabet()) {
        System.out.println("c = " + c);
    }
}

El nuevo Iterator debe venir con un estado que apunta al primer elemento, y cada llamada a la siguiente actualiza su estado para apuntar a la siguiente. El hasNext() comprueba si el iterador está al final. Si el iterador estuviera conectado a una colección modificable, entonces se podría implementar el método opcional remove() del iterador para eliminar el elemento al que se apunta actualmente desde la colección subyacente.