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.