Iterator omzetten in lijst

1. Overzicht

In deze korte tutorial leren we hoe je een Iterator naar een Lijst in Java. We behandelen een paar voorbeelden met behulp van een while-lus, Java 8 en een paar veelgebruikte bibliotheken.

We gebruiken een Iterator met Geheel getals voor al onze voorbeelden:

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

2. Een While-lus gebruiken

Laten we beginnen met de benadering die traditioneel werd gebruikt vóór Java 8. We zullen converteer het Iterator naar een Lijst gebruik makend vaneen terwijl lus:

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

3. Java 8 gebruiken Iterator.forEachRemaining

In Java 8 en hoger kunnen we de Iterator‘S forEachRemaining () methode om onze Lijst. We passeren de toevoegen() methode van de Lijst interface als referentiemethode:

Lijst actualList = nieuwe ArrayList (); iterator.forEachRemaining (actualList :: add); assertThat (actualList, bevatInAnyOrder (1, 2, 3)); 

4. Met behulp van de Java 8 Streams API

Vervolgens gebruiken we de Java 8 Streams API om het Iterator naar een Lijst. Om de Stroom API, we moeten converteer eerst de Iterator aan een Herhaalbaar. We kunnen dit doen met Java 8 Lambda-expressies:

Iterable iterable = () -> iterator; 

Nu kunnen we gebruik de StreamSupport klasse' stroom() en verzamelen() methoden om het Lijst:

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

5. Guava gebruiken

De Guava-bibliotheek van Google biedt opties om zowel een veranderlijk als onveranderlijk te maken Lijsts, dus we zullen beide benaderingen zien.

Laten we eerst een onveranderlijk maken Lijst gebruik makend van ImmutableList.copyOf () methode:

Lijst actualList = ImmutableList.copyOf (iterator); assertThat (actualList, bevatInAnyOrder (1, 2, 3));

Laten we nu een veranderlijk maken Lijst gebruik makend van Lists.newArrayList () methode:

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

6. Apache Commons gebruiken

De Apache Commons Collections-bibliotheek biedt opties om te werken aan een Lijst. We zullen gebruiken IteratorUtils om de conversie uit te voeren:

Lijst actualList = IteratorUtils.toList (iterator); assertThat (actualList, bevatInAnyOrder (1, 2, 3));

7. Conclusie

In dit artikel hebben we een aantal opties besproken voor het converteren van een Iterator naar een Lijst. Hoewel er een paar andere manieren zijn om dit te bereiken, hebben we een aantal veelgebruikte opties behandeld.

De implementatie van al deze voorbeelden en codefragmenten is te vinden op GitHub.