THEDEVELOPERSCONFERENCE
JAVA 8 STREAMS
@yagosilvadev
Yago Silva
@yagosilvadev
https://github.com/yago-silva
http://meetup.com/friendstechday
Vamos falar sobre Api de Streams
O que é ?Por que usar ?Quando usar ?Quando não usar ?Como funciona ?É mais rápido que um usar um loop for comum?
Onde vive? O que come? Como se reproduz?
NÃO GANHEI UMA CAMISETA P
Inscritos no https://developers.redhat.com
Que tenham ganho a camisa da RedHat tamanho P
PROCURA-SE:
Emails de 2 Participantes do TDC São Paulo 2016
SHOW ME THE CODE
Importante: O método ```isInscrito()``` acessa o WebService da RedHat para verificar a
inscrição do participante, e isso pode demorar para terminar! Ainda sim estamos processando
toda nossa lista em uma única thread!
Não estamos usando da melhor maneira osrecursos que a máquina oferece
Problemas nessa implementação:
Código não intuitivo
O que são Streams ?
Stream é o "caminho" por onde passam os dados
As Coleções definem como os dados devem serarmazenados (lista, mapa, set, etc)
Os Streams definem o que vai ser feito com os dados
Streams VS Coleções
A api de streams aproxima o dev Java do mundo funcionaltrazendo conceitos como map reduce, etc. O próprioStream é uma mônade.
Programação funcional no mundo Java
Como Criar um Stream ?
Spring Data e Streams
https://spring.io/blog/2015/03/26/what-s-new-in-spring-data-fowler
Usando Streams para achar uma camiseta P
O código ainda não está intuitivo
LambdaMethod Reference
Alguns recursos do Java 8 Para melhorar o código
Mais detahes sobre a api
A ordem dos métodos na hora de criar seu pipeline podeafetar performance.
Lazy Evaluation
Lazy Evaluation
Streams podem ser infinitos por isso é necessário avaliar opipeline de forma lazy.
Intermediate and Terminal methods
Pode trazer ganhos de performance. Exemplos: ShortCircuit, pegar dados do banco de forma Lazy
Intermediate Operations
Todas as operações da api de stream que tem comoretorno um objeto do tipo stream (filter, map, distinct, skip,sorted, limit, etc)
São avaliadas de maneira lazy, somente após a chamada deuma terminal operation.
Terminal Operations
Todas as operações da api de stream sem retorno ou quetem como retorno um objeto de um tipo diferente deStream
São avaliadas de maneira eager e finalizam a configuraçãodo pipeline de execução.
Collectors (toList, toSet, groupBy)
Performance
Um for convencional pode ser a solução mais rápida emalguns casos
Parallel Stream
Parallel Stream
Não necessariamente vai processar mais rápido só porrealizar processamento em parallelo
Pode ser mais rápido em casos onde o processamento decada elemento tenha algum passo demorado
Não é aconselhável em ambientes WEB.
Obrigado!
@yagosilvadev
https://github.com/yago-silva
http://meetup.com/friendstechday