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.