Convertendo iterável em coleção em Java
1. Visão geral
Neste tutorial,we’ll explore different ways to convert an Iterable to a Collection in Java.
Começaremos com soluções Java simples e, em seguida, daremos uma olhada nas opções que as bibliotecas Guava e Apache Commons também oferecem.
2. Iterable eIterator
Primeiro, vamos definir nossoIterable:
Iterable iterable = Arrays.asList("john", "tom", "jane");
Também definiremos umIterator simples - para destacar a diferença entre converterIterable emCollection eIterator emCollection:
Iterator iterator = iterable.iterator();
3. Usando Plain Java
3.1. Iterable aCollection
Podemosuse the Java 8 forEach() method to add all elements to the List:
@Test
public void whenConvertIterableToListUsingJava8_thenSuccess() {
List result = new ArrayList();
iterable.forEach(result::add);
assertThat(result, contains("john", "tom", "jane"));
}
Ouuse the Spliterator class to convert our Iterable to Stream then to Collection:
List result =
StreamSupport.stream(iterable.spliterator(), false)
.collect(Collectors.toList());
3.2. Iterator aCollection
Por outro lado, em vez de usarforEach(), usaremosforEachRemaining() comIterator:
@Test
public void whenConvertIteratorToListUsingJava8_thenSuccess() {
List result = new ArrayList();
iterator.forEachRemaining(result::add);
assertThat(result, contains("john", "tom", "jane"));
}
Também podemos criar umSpliterator de nossoIterator e usá-lo para converterIterator emStream:
List result =
StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
.collect(Collectors.toList());
3.3. Usando um loop For
Vamos também dar uma olhada em uma solução que usa um loop for muito simples para converter nossoIterable emList:
@Test
public void whenConvertIterableToListUsingJava_thenSuccess() {
List result = new ArrayList();
for (String str : iterable) {
result.add(str);
}
assertThat(result, contains("john", "tom", "jane"));
}
Por outro lado, usaremoshasNext()enext() comIterator:
@Test
public void whenConvertIteratorToListUsingJava_thenSuccess() {
List result = new ArrayList();
while (iterator.hasNext()) {
result.add(iterator.next());
}
assertThat(result, contains("john", "tom", "jane"));
}
4. Usando goiaba
Existem também algumas bibliotecas disponíveis que fornecem métodos convenientes para nos ajudar a conseguir isso.
Vamos ver como podemos usarGuava para converter de umIterable para umList:
Podemos criar um novoList deIterable ouIterator usandoLists.newArrayList():
List result = Lists.newArrayList(iterable);
Ou podemos usarImmutableList.copyOf():
List result = ImmutableList.copyOf(iterable);
5. Usando o Apache Commons
Finalmente,we’ll use Apache Commons IterableUtils to create a List from Iterable:
List result = IterableUtils.toList(iterable);
Da mesma forma, usaremosIteratorUtils para criar umList de nossoIterator:
List result = IteratorUtils.toList(iterator);
6. Conclusão
Neste breve artigo, aprendemos como converterIterableeIterator emCollection usando Java. Exploramos maneiras diferentes usando Java simples e duas bibliotecas externas: Guava e Apache Commons.
Como sempre, o código-fonte completo está disponível emGitHub.