Conversia Iterable în colecție în Java

1. Prezentare generală

În acest tutorial, vom explora diferite moduri de a converti un Iterable într-o colecție în Java .

Vom începe cu soluții Java simple, apoi vom arunca o privire asupra opțiunilor oferite de bibliotecile Guava și Apache Commons.

2. Iterabil și Iterator

În primul rând, vom defini iterabilul nostru :

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

De asemenea, vom defini un Iterator simplu - pentru a evidenția diferența dintre conversia Iterable în Colecție și Iterator în Colecție :

Iterator iterator = iterable.iterator();

3. Utilizarea Java simplă

3.1. Iterabil la Colecție

Putem folosi metoda Java 8 forEach () pentru a adăuga toate elementele la Listă :

@Test public void whenConvertIterableToListUsingJava8_thenSuccess() { List result = new ArrayList(); iterable.forEach(result::add); assertThat(result, contains("john", "tom", "jane")); }

Sau utilizați clasa Spliterator pentru a converti Iterabilul nostru în Stream apoi în Colecție :

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

3.2. Iterator la Colecție

Pe de altă parte, în loc să folosim forEach () , vom folosi forEachRemaining () cu Iterator :

@Test public void whenConvertIteratorToListUsingJava8_thenSuccess() { List result = new ArrayList(); iterator.forEachRemaining(result::add); assertThat(result, contains("john", "tom", "jane")); }

De asemenea, putem crea un Spliterator din Iterator, apoi îl putem utiliza pentru a converti Iterator în Stream :

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

3.3. Folosirea unui For-Loop

Să aruncăm o privire și asupra unei soluții care utilizează o buclă foarte simplă pentru a converti Iterabilul nostru într-o listă :

@Test public void whenConvertIterableToListUsingJava_thenSuccess() { List result = new ArrayList(); for (String str : iterable) { result.add(str); } assertThat(result, contains("john", "tom", "jane")); }

Pe de altă parte, vom folosi hasNext () și next () cu Iterator :

@Test public void whenConvertIteratorToListUsingJava_thenSuccess() { List result = new ArrayList(); while (iterator.hasNext()) { result.add(iterator.next()); } assertThat(result, contains("john", "tom", "jane")); }

4. Utilizarea Guava

Există, de asemenea, câteva biblioteci disponibile care oferă metode convenabile pentru a ne ajuta să realizăm acest lucru.

Să vedem cum putem folosi Guava pentru a converti dintr-un Iterabil în Listă :

Putem crea o nouă Listă de la Iterable sau Iterator folosind Lists.newArrayList () :

List result = Lists.newArrayList(iterable);

Sau putem folosi ImmutableList.copyOf () :

List result = ImmutableList.copyOf(iterable);

5. Utilizarea Apache Commons

În cele din urmă, vom folosi Apache Commons IterableUtils pentru a crea o listă din Iterable :

List result = IterableUtils.toList(iterable);

În mod similar, vom folosi IteratorUtils pentru a crea o listă din Iterator :

List result = IteratorUtils.toList(iterator);

6. Concluzie

În acest scurt articol, am învățat cum să convertim un Iterable și un Iterator într-o colecție folosind Java. Am explorat diferite moduri folosind Java simplu și două biblioteci externe: Guava și Apache Commons.

Ca întotdeauna, codul sursă complet este disponibil pe GitHub.