Konvertering av Iterable til Collection i Java

1. Oversikt

I denne veiledningen, vi vil utforske forskjellige måter å konvertere en Iterabel til en Samling i Java.

Vi begynner med vanlige Java-løsninger, og tar en titt på alternativene som Guava og Apache Commons-biblioteker også tilbyr.

2. Iterabel og Iterator

Først skal vi definere vår Iterabel:

Iterable iterable = Arrays.asList ("john", "tom", "jane");

Vi vil også definere en enkel Iterator - for å markere forskjellen mellom konvertering Iterabel til Samling og Iterator til Samling:

Iterator iterator = iterable.iterator ();

3. Bruke vanlig Java

3.1. Iterabel til Samling

Vi kan bruk Java 8 for hver() metoden for å legge til alle elementene i Liste:

@Test offentlig ugyldig nårConvertIterableToListUsingJava8_thenSuccess () {Listresultat = ny ArrayList (); iterable.forEach (result :: add); assertThat (resultat, inneholder ("john", "tom", "jane")); }

Eller bruke Spliterator klasse for å konvertere vår Iterabel til Strøm deretter til Samling:

Listeresultat = StreamSupport.stream (iterable.spliterator (), false) .collect (Collectors.toList ());

3.2. Iterator til Samling

På den annen side, i stedet for å bruke for hver(), vi bruker forEachRemaining () med Iterator:

@Test offentlig ugyldig nårConvertIteratorToListUsingJava8_thenSuccess () {Listresultat = ny ArrayList (); iterator.forEachRemaining (resultat :: legg til); assertThat (resultat, inneholder ("john", "tom", "jane")); }

Vi kan også lage en Spliterator fra vår Iterator bruk den deretter til å konvertere Iterator til Strøm:

Listresultat = StreamSupport.stream (Spliterators.spliteratorUnknownSize (iterator, Spliterator.ORDERED), false) .collect (Collectors.toList ());

3.3. Bruke en For-Loop

La oss også ta en titt på en løsning som bruker en veldig enkel for-loop for å konvertere vår Iterabel til en Liste:

@Test offentlig ugyldig nårConvertIterableToListUsingJava_thenSuccess () {Listresultat = ny ArrayList (); for (String str: iterable) {result.add (str); } assertThat (resultat, inneholder ("john", "tom", "jane")); }

På den annen side vil vi bruke hasNext () og neste () med Iterator:

@Test offentlig ugyldig nårConvertIteratorToListUsingJava_thenSuccess () {List result = new ArrayList (); mens (iterator.hasNext ()) {result.add (iterator.next ()); } assertThat (resultat, inneholder ("john", "tom", "jane")); }

4. Bruke Guava

Det er også noen få biblioteker tilgjengelig som gir praktiske metoder for å hjelpe oss med å oppnå dette.

La oss se hvordan vi kan bruke Guava til å konvertere fra en Iterabel til en Liste:

Vi kan lage et nytt Liste fra Iterabel eller Iterator ved hjelp av Lists.newArrayList ():

Listresultat = Lists.newArrayList (iterable);

Eller vi kan bruke ImmutableList.copyOf ():

Listresultat = ImmutableList.copyOf (iterable);

5. Bruke Apache Commons

Endelig, vi bruker Apache Commons IterableUtils å lage en Liste fra Iterabel:

Listresultat = IterableUtils.toList (iterable);

På samme måte vil vi bruke IteratorUtils å lage en Liste fra vår Iterator:

Liste resultat = IteratorUtils.toList (iterator);

6. Konklusjon

I denne korte artikkelen lærte vi hvordan vi konverterer en Iterabel og Iterator til en Samling bruker Java. Vi utforsket forskjellige måter ved hjelp av vanlig Java og to eksterne biblioteker: Guava og Apache Commons.

Som alltid er hele kildekoden tilgjengelig på GitHub.