Iterable to Stream Java

Este breve tutorial mostra como converter um objeto java Iterable em um fluxo (Stream) realizando algumas operações simples.

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Java - TUTORIAL

Última atualização em: | 2416 Visualizações

Convertendo Iterable para Stream

A interface Iterable foi projetada tendo em mente a generalidade por isso não fornece nenhum método stream().

Para obter um Stream a partir de um iterable, pode passá-lo para o método StreamSupport.stream() e obter um fluxo:

Considere a lista:

Iterable<Integer> numbers = Arrays.asList(100, 10, 1, 56, 180);

Podemos converter essa instância iterável em um fluxo da seguinte forma:

StreamSupport.stream(numbers.spliterator(), false);

Note que o segundo parametro determina se o fluxo deve ser paralelo ou sequêncial. Usamos false para usar de forma sequêncial.



Por fim, podemos fazer as operações que precisarmos com o fluxo retornado, veja os exemplos:

import java.util.Arrays;
import java.util.Comparator;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

public class SampleMainIterable {

    public static void main(String[] args) {
        Iterable<Integer> numbers = Arrays.asList(100, 10, 1, 56, 180);

        System.out.println( String.format("Itens: %s", getStream(numbers).count()) );
        System.out.println( String.format("Ordenada: %s", getStream(numbers).findFirst().get()) );
        System.out.println( String.format("Maxímo: %s", getStream(numbers).max(Comparator.comparing(Integer::valueOf)).get()) );
    }


    private static Stream<Integer> getStream(Iterable<Integer> numbers) {
        return StreamSupport.stream(numbers.spliterator(), false);
    }

}

Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.


Apoiadores

Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!