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.