Konvertering af Iterable til Collection i Java

1. Oversigt

I denne vejledning vi undersøger forskellige måder at konvertere en Iterabel til en Kollektion i Java.

Vi starter med almindelige Java-løsninger og kigger derefter på de muligheder, som Guava og Apache Commons-bibliotekerne også giver.

2. Iterabel og Iterator

Først definerer vi vores Iterabel:

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

Vi definerer også en simpel Iterator - for at fremhæve forskellen mellem konvertering Iterabel til Kollektion og Iterator til Kollektion:

Iterator iterator = iterable.iterator ();

3. Brug af almindelig Java

3.1. Iterabel til Kollektion

Vi kan brug Java 8 for hver() metode til at tilføje alle elementer til Liste:

@Test offentlig ugyldig nårConvertIterableToListUsingJava8_thenSuccess () {List result = new ArrayList (); iterable.forEach (resultat :: tilføj); assertThat (resultat, indeholder ("john", "tom", "jane")); }

Eller brug Spliterator klasse til at konvertere vores Iterabel til Strøm derefter til Kollektion:

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

3.2. Iterator til Kollektion

På den anden side i stedet for at bruge for hver(), vi bruger forEachRemaining () med Iterator:

@Test offentlig ugyldig nårConvertIteratorToListUsingJava8_thenSuccess () {List result = new ArrayList (); iterator.forEachRemaining (resultat :: tilføj); assertThat (resultat, indeholder ("john", "tom", "jane")); }

Vi kan også oprette en Spliterator fra vores Iterator brug den derefter til at konvertere Iterator til Strøm:

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

3.3. Brug af en For-Loop

Lad os også se på en løsning, der bruger en meget enkel for-loop til at konvertere vores Iterabel til en Liste:

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

På den anden side bruger vi hasNext () og Næste() med Iterator:

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

4. Brug af Guava

Der er også et par biblioteker til rådighed, der giver praktiske metoder til at hjælpe os med at opnå dette.

Lad os se, hvordan vi kan bruge Guava til at konvertere fra en Iterabel til en Liste:

Vi kan skabe et nyt Liste fra Iterabel eller Iterator ved brug af Lists.newArrayList ():

Liste resultat = Lists.newArrayList (iterable);

Eller vi kan bruge ImmutableList.copyOf ():

Listeresultat = ImmutableList.copyOf (iterable);

5. Brug af Apache Commons

Langt om længe, vi bruger Apache Commons IterableUtils at oprette en Liste fra Iterabel:

Listeresultat = IterableUtils.toList (iterable);

På samme måde bruger vi IteratorUtils at oprette en Liste fra vores Iterator:

Listeresultat = IteratorUtils.toList (iterator);

6. Konklusion

I denne korte artikel lærte vi, hvordan man konverterer en Iterabel og Iterator til en Kollektion ved hjælp af Java. Vi udforskede forskellige måder ved hjælp af almindelig Java og to eksterne biblioteker: Guava og Apache Commons.

Som altid er den fulde kildekode tilgængelig på GitHub.