Konvertering av Iterator til liste

1. Oversikt

I denne korte opplæringen lærer vi hvordan vi konverterer en Iterator til en Liste i Java. Vi vil dekke noen få eksempler ved hjelp av en while-loop, Java 8 og noen vanlige biblioteker.

Vi bruker en Iterator med Heltalls for alle eksemplene våre:

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

2. Bruke en While Loop

La oss begynne med tilnærmingen som tradisjonelt ble brukt før Java 8. Vi vil konvertere Iterator til en Liste ved hjelp aven samtidig som Løkke:

Liste actualList = ny ArrayList (); mens (iterator.hasNext ()) {actualList.add (iterator.next ()); } assertThat (actualList, inneholderInAnyOrder (1, 2, 3)); 

3. Bruke Java 8 Iterator.forEachRemaining

I Java 8 og nyere kan vi bruke Iterator‘S forEachRemaining () metode for å bygge vår Liste. Vi passerer legge til() metoden for Liste grensesnitt som metodehenvisning:

Liste actualList = ny ArrayList (); iterator.forEachRemaining (actualList :: add); assertThat (actualList, inneholderInAnyOrder (1, 2, 3)); 

4. Bruke Java 8 Streams API

Deretter bruker vi Java 8 Streams API til å konvertere Iterator til en Liste. For å bruke Strøm API, vi må først konvertere Iterator til en Iterabel. Vi kan gjøre dette ved hjelp av Java 8 Lambda-uttrykk:

Iterabel iterable = () -> iterator; 

Nå kan vi bruke StreamSupport klasse' strøm() og samle inn() metoder for å bygge Liste:

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

5. Bruke Guava

De Guava bibliotek fra Google gir muligheter for å lage både en foranderlig og uforanderlig Listes, så vi får se begge tilnærmingene.

La oss først lage en uforanderlig Liste ved hjelp av ImmutableList.copyOf () metode:

Liste actualList = ImmutableList.copyOf (iterator); assertThat (actualList, inneholderInAnyOrder (1, 2, 3));

La oss nå lage en foranderlig Liste ved hjelp av Lists.newArrayList () metode:

Liste actualList = Lists.newArrayList (iterator); assertThat (actualList, inneholderInAnyOrder (1, 2, 3));

6. Bruke Apache Commons

De Apache Commons Collections-biblioteket gir muligheter til å jobbe med en Liste. Vi bruker IteratorUtils å gjøre konverteringen:

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

7. Konklusjon

I denne artikkelen har vi dekket noen få alternativer for å konvertere en Iterator til en Liste. Selv om det er noen andre måter å oppnå dette på, har vi dekket flere vanlige alternativer.

Implementeringen av alle disse eksemplene og kodebiter finner du på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found