Iterável para transmitir em Java

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.