Iterável para transmitir em Java
1. Visão geral
Neste breve tutorial, vamos converter um objeto JavaIterable em umStreame realizar algumas operações padrão nele.
2. ConvertendoIterable emStream
A interfaceIterable foi projetada tendo a generalidade em mente e não fornece nenhum métodostream() por conta própria.
Simplificando, você pode passá-lo para o métodoStreamSupport.stream()e obter umStream da instânciaIterable fornecida.
Vamos considerar nossa instânciaIterable:
Iterable iterable
= Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");
E aqui está como podemos converter esta instânciaIterable em umStream:
StreamSupport.stream(iterable.spliterator(), false);
Observe que o segundo parâmetro emStreamSupport.stream() determina se oStream resultante deve ser paralelo ou sequencial. Você deve defini-lo como verdadeiro, para umStream paralelo.
Agora vamos testar nossa implementação:
@Test
public void givenIterable_whenConvertedToStream_thenNotNull() {
Iterable iterable
= Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");
Assert.assertNotNull(StreamSupport.stream(iterable.spliterator(), false));
}
Além disso, uma observação rápida - os fluxos não são reutilizáveis, enquantoIterable é; ele também fornece um métodospliterator(), que retorna umjava.lang.Spliterator instance sobre os elementos descritos peloIterable fornecido.
3. ExecutandoStream Operação
Vamos realizar uma operação de fluxo simples:
@Test
public void whenConvertedToList_thenCorrect() {
Iterable iterable
= Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");
List result = StreamSupport.stream(iterable.spliterator(), false)
.map(String::toUpperCase)
.collect(Collectors.toList());
assertThat(
result, contains("TESTING", "ITERABLE", "CONVERSION", "TO", "STREAM"));
}
4. Conclusão
Este tutorial simples mostra como você pode converter uma instânciaIterable em uma instânciaStream e realizar operações padrão nela, assim como você teria feito para qualquer outra instânciaCollection.
A implementação de todos os trechos de código pode ser encontrada emGithub project.