Introdução a API de Streams do Java

A API de streams do java nos permite trabalhar com collections de maneira mais simples, com stream o processamento das collections será de forma funcional declarativa, diferente da forma imperativa na qual estamos acostumados a trabalhar até as versões anteriores ao Java 8.

Stream pode ser definida como uma sequência de elementos de uma fonte de dados que oferece suporte a diferentes tipos de operações.

Para demonstrar o uso da API preparei um simples exemplo para filtrar livros, obter o preço do livro mais caro, mais barato , média dos preços…

Abaixo segue o código para exemplificar como podemos utilizar a API:

 

Temos a classe LivroStreamsExemplo.

Na classe StreamsExemplo temos:

Para obtermos os livros com o preço maior do que 30 chamamos o método stream() da interface Collection para poder chamar o método filter(), passamos uma expressão lambda, percorremos por esses objetos com o método foreach e fazemos chamadas em System.out::println usando method references e consequentemente o método toString() do objeto l do tipo Livro será chamado.

livros.stream().filter(l -> l.getPreco() > 30).forEach(System.out::println);

Uma forma para obtermos o preço total de todos os livros seria usando o método mapToDouble(). Com ele podemos aplicar a mesma operação, nesse caso a soma, para todos os preços dos livros que se encontram na coleção, mais uma vez utilizando method references.

Double precoTotal = livros.stream().mapToDouble(Livro::getPreco).sum();
System.out.println(“Soma dos preços de todos os livros: “ + precoTotal);

Também podemos obter outras informações como o preço do livro mais caro e mais barato, a soma de todos os preços, quantidade e média. Para isso basta aplicarmos o mapToDouble novamente na stream e chamar summaryStatistics(), então um  DoubleStream é retornado e conseguimos acessar os métodos getMax(), getMin(), getSum(), getAverage().

 

DoubleSummaryStatistics estatisticas = livros.stream().mapToDouble(Livro::getPreco).summaryStatistics();
System.out.println(“Preço do livro mais caro: “+ estatisticas.getMax());
System.out.println(“Preço do livro mais barato: “+ estatisticas.getMin());
System.out.println(“Soma do preço de todos os livros: “+ estatisticas.getSum());
System.out.println(“Quantidade dos livros: “+ estatisticas.getCount());
System.out.println(“Média de preço dos livros: “+ estatisticas.getAverage());

Para processar um volume maior de dados de forma paralela podemos chamar o método parallelStream() no lugar de stream().

Bom essa foi uma pequena introdução a api de streams, espero que tenha ajudado alguém com este post 🙂 !

Anúncios

2 comentários em “Introdução a API de Streams do Java”

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s