Convertendo o iterador em lista
1. Visão geral
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.