Konwertowanie Iteratora na Listę

1. Przegląd

Z tego krótkiego samouczka dowiemy się, jak przekonwertować iterator na listę w Javie. Omówimy kilka przykładów wykorzystujących pętlę while, Java 8 i kilka popularnych bibliotek.

We wszystkich naszych przykładach użyjemy Iteratora z liczbami Integer s:

Iterator iterator = Arrays.asList(1, 2, 3).iterator(); 

2. Korzystanie z pętli While

Zacznijmy tradycyjnie stosowanego podejścia przed Java 8. Będziemy przekonwertować Iterator do listy używając do while pętli :

List actualList = new ArrayList(); while (iterator.hasNext()) { actualList.add(iterator.next()); } assertThat(actualList, containsInAnyOrder(1, 2, 3)); 

3. Korzystanie z Java 8 Iterator.forEachRemaining

W Javie 8 i później, możemy użyć Iterator „s forEachRemaining () metodę, aby zbudować naszą listę . Jako odwołanie do metody przekażemy metodę add () interfejsu List :

List actualList = new ArrayList(); iterator.forEachRemaining(actualList::add); assertThat(actualList, containsInAnyOrder(1, 2, 3)); 

4. Korzystanie z Java 8 Streams API

Następnie użyjemy Java 8 Streams API, aby przekonwertować Iterator na Listę . Aby użyć Stream API, musimy najpierw przekonwertować Iterator na Iterable . Możemy to zrobić używając wyrażeń Lambda Java 8:

Iterable iterable = () -> iterator; 

Teraz możemy użyć metod stream () i collect () klasy StreamSupport do zbudowania listy :

List actualList = StreamSupport .stream(iterable.spliterator(), false) .collect(Collectors.toList()); assertThat(actualList, containsInAnyOrder(1, 2, 3));

5. Korzystanie z guawy

Biblioteki Guava z Google udostępnia opcje tworzenia zarówno zmienne i niezmienne Lista s , więc zobaczymy obu podejść.

Najpierw utwórzmy niezmienną Listę przy użyciu metody ImmutableList.copyOf () :

List actualList = ImmutableList.copyOf(iterator); assertThat(actualList, containsInAnyOrder(1, 2, 3));

Teraz stwórzmy zmienną Listę za pomocą metody Lists.newArrayList () :

List actualList = Lists.newArrayList(iterator); assertThat(actualList, containsInAnyOrder(1, 2, 3));

6. Korzystanie z Apache Commons

Apache Commons kolekcje biblioteka udostępnia opcje do pracy na listy. Do konwersji użyjemy IteratorUtils :

List actualList = IteratorUtils.toList(iterator); assertThat(actualList, containsInAnyOrder(1, 2, 3));

7. Wnioski

W tym artykule omówiliśmy kilka opcji konwersji iteratora na listę . Chociaż istnieje kilka innych sposobów osiągnięcia tego celu, omówiliśmy kilka często używanych opcji.

Implementację wszystkich tych przykładów i fragmentów kodu można znaleźć na GitHub.