Iterator in Liste konvertieren

1. Übersicht

In diesem kurzen Tutorial erfahren Sie, wie Sie einen Iterator in eine Liste in Java konvertieren . Wir werden einige Beispiele mit einer while-Schleife, Java 8 und einigen allgemeinen Bibliotheken behandeln.

Wir werden ein verwenden Iterator mit Integer s für alle unsere Beispiele:

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

2. Verwenden einer While-Schleife

Beginnen wir mit dem traditionell vor Java 8 verwendeten Ansatz. Wir konvertieren den Iterator mithilfe einer while- Schleife in eine Liste :

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

3. Verwenden von Java 8 Iterator.forEachRemaining

In Java 8 und höher können wir den Einsatz Iterator ‚s forEachRemaining () Methode , um unsere bauen Liste . Wir übergeben die add () -Methode der List- Schnittstelle als Methodenreferenz:

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

4. Verwenden der Java 8 Streams-API

Als Nächstes verwenden wir die Java 8 Streams-API, um den Iterator in eine Liste zu konvertieren . Um die Stream- API verwenden zu können, müssen wir zuerst den Iterator in einen Iterable konvertieren . Wir können dies mit Java 8 Lambda-Ausdrücken tun:

Iterable iterable = () -> iterator; 

Jetzt können wir die Methoden stream () und collect () der StreamSupport- Klasse verwenden, um die Liste zu erstellen :

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

5. Verwenden von Guave

Die Guava Bibliothek von Google bietet Optionen sowohl eine veränderliche und unveränderlich zu erstellen Liste s , so dass wir beide Ansätze sehen werden.

Erstellen wir zunächst eine unveränderliche Liste mit der Methode ImmutableList.copyOf () :

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

Erstellen wir nun eine veränderbare Liste mit der Methode Lists.newArrayList () :

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

6. Verwenden von Apache Commons

Die Apache Commons Collections-Bibliothek bietet Optionen zum Bearbeiten einer Liste. Wir werden IteratorUtils verwenden , um die Konvertierung durchzuführen :

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

7. Fazit

In diesem Artikel haben wir einige Optionen zum Konvertieren eines Iterators in eine Liste behandelt . Es gibt zwar einige andere Möglichkeiten, dies zu erreichen, wir haben jedoch einige häufig verwendete Optionen behandelt.

Die Implementierung all dieser Beispiele und Codefragmente finden Sie auf GitHub.