Iterable to Stream Java
Este breve tutorial mostra como converter um objeto java Iterable em um fluxo (Stream) realizando algumas operações simples.
Última atualização em: | 2559 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.