Convertendo o iterador em lista

Convertendo o iterador em lista

1. Visão geral

Neste breve tutorial, aprenderemos como converter umIterator em umList em Java. Cobriremos alguns exemplos usando um loop while, Java 8 e algumas bibliotecas comuns.

Usaremos umIterator comIntegers para todos os nossos exemplos:

Iterator iterator = Arrays.asList(1, 2, 3).iterator();

2. Usando um loop While

Vamos começar com a abordagem tradicionalmente usada antes do Java 8. Vamosconvert the Iterator to a List usinga while loop:

List actualList = new ArrayList();
while (iterator.hasNext()) {
    actualList.add(iterator.next());
}

assertThat(actualList, containsInAnyOrder(1, 2, 3));

3. Usando Java 8Iterator.forEachRemaining

No Java 8 e posterior, podemos usar o métodoIterator'sforEachRemaining() para construir nossoList. Vamos passar o métodoadd() da interfaceList como ummethod reference:

List actualList = new ArrayList();
iterator.forEachRemaining(actualList::add);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

4. Usando a API Java 8 Streams

A seguir, usaremosJava 8 Streams API para converterIterator emList. Para usar a APIStream, precisamosfirst convert the Iterator to an Iterable. Podemos fazer isso usando expressões Java 8 Lambda:

Iterable iterable = () -> iterator;

Agora, podemosuse the StreamSupport class' stream() and collect() methods to build the List:

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

assertThat(actualList, containsInAnyOrder(1, 2, 3));

5. Usando goiaba

OGuava libraryfrom Google provides options to create both a mutable and immutable Lists_,_, então veremos as duas abordagens.

Vamos primeiro criar umList imutável usando o métodoImmutableList.copyOf():

List actualList = ImmutableList.copyOf(iterator);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

Agora, vamos criar umList mutável usando o métodoLists.newArrayList():

List actualList = Lists.newArrayList(iterator);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

6. Usando o Apache Commons

OApache Commons Collections library provides options to work on a List.  UsaremosIteratorUtils para fazer a conversão:

List actualList = IteratorUtils.toList(iterator);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

7. Conclusão

Neste artigo, cobrimos algumas opções para converter umIterator em umList. Embora existam algumas outras maneiras de conseguir isso, cobrimos várias opções comumente usadas.

A implementação de todos esses exemplos e trechos de código pode ser encontradaover on GitHub.