Pojęcie iteratora jest ostatnim, które związane jest z kolekcjami. Są one alternatywą dla klasyczny pętli for oraz foreach. Każda z kolekcji Java, która dziedziczy po interfejsie Collection, posiada w swoim API operację o nazwie 'iterator’. Interfejs Iterator jest bardzo prostą strukturą udostępniającą właściwie tylko trzy metody: next, hasNext, oraz remove.
public static void main(String[] args) {
List<String> movies = new ArrayList<>();
movies.add("Indiana Jones");
movies.add("Avengers");
movies.add("Star Wars");
Iterator<String> iterator = movies.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
Przeglądanie rekordów
Iteratory dobrze sprawdzają się wraz z pętlą while, ponieważ warunek stopu tej pętli jest typu boolean, także świetnie można go ustalić korzystając z metody hasNext. W przeciwieństwie pętli for, nie wskazuje się tu numeru indeksu, aby skorzystać z kolejnego wartości na liście. Wystarczy użyć metody next.
Ciekawostka. Jeśli napiszesz taki kod:
while (movies.iterator().hasNext()) {
System.out.println(movies.iterator().next());
}
To niestety nie zadziała. Wydaje się, że kod jest tożsamy z powyższym, ale w rzeczywistości jest drobnym błędem, ponieważ Iterator będzie otwierał się za każdą iteracją.
Usuwanie elementów
Oprócz przeglądania kolejnych rekordów, interfejs Iterator umożliwia też usuwać rekordy używając metody remove.
while (iterator.hasNext()) {
iterator.remove();
}
Interfejs iterator po swojemu
Jeśli interesuje Cię, jak samemu napisać własny iterator, przejrzyj tą lekcję: https://developeronthego.pl/java-zaawansowane-4-wlasny-iterator
Link do kodu: https://github.com/developeronthego/java-middle/tree/master/src/main/java/middle/lesson19
