Ejemplo de funcionamiento de las interfaces Iterable e Iterator en Java.
Sobre una colección propia llamada Sorteador se implementa la interfaz Iterable que obliga a sobreescribir el método iterator(), el cual debe retornar un objeto Iterator.
Como Iterator es una interfaz, se crea una clase interna en la clase Sorteador llamada IteratorSorteador que implementa Iterator. Esta interfaz obliga a sobreescribir los métodos next() y hasNext(), cuyas firmas pueden observarse en el diagrama de clases o el código del proyecto.
Una colección iterable permite poder iterarla sin conocer sus detalles de implementación.
Suponiendo tener un sorteador de cadenas:
Sorteador<String> miSorteador = new Sorteador<String>();Podría iterarse sabiendo cómo funcionan los sorteadores:
while (!miSorteador.isEmpty()) {
System.out.println(miSorteador.remove());
}Sin embargo, hay dos maneras de iterarlo sin conocer sus detalles de implementación ni el nombre de sus métodos:
Iterator<String> it = miSorteador.iterator(); // Pido un iterador al sorteador
while (it.hasNext()) { // Mientras haya siguiente
String elemento = it.next(); // Guardar siguiente en 'elemento'
System.out.println(elemento); // Mostrar 'elemento'
}for (String elemento : miSorteador) { // Para cada 'elemento' de tipo 'String' en la colección 'miSorteador'
System.out.println(elemento); // Mostrar 'elemento'
}Proyecto realizado con NetBeans 8.2. Compatible con Eclipse.
