tdc2016sp - aperfeiçoando seu código com stream
TRANSCRIPT
![Page 1: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/1.jpg)
THEDEVELOPERSCONFERENCE
JAVA 8 STREAMS
@yagosilvadev
![Page 2: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/2.jpg)
Yago Silva
@yagosilvadev
https://github.com/yago-silva
http://meetup.com/friendstechday
![Page 3: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/3.jpg)
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?
![Page 4: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/4.jpg)
NÃO GANHEI UMA CAMISETA P
![Page 5: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/5.jpg)
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
![Page 6: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/6.jpg)
SHOW ME THE CODE
![Page 7: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/7.jpg)
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!
![Page 8: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/8.jpg)
Não estamos usando da melhor maneira osrecursos que a máquina oferece
Problemas nessa implementação:
Código não intuitivo
![Page 9: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/9.jpg)
![Page 10: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/10.jpg)
O que são Streams ?
![Page 11: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/11.jpg)
![Page 12: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/12.jpg)
Stream é o "caminho" por onde passam os dados
![Page 13: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/13.jpg)
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
![Page 14: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/14.jpg)
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
![Page 15: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/15.jpg)
![Page 16: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/16.jpg)
Como Criar um Stream ?
![Page 17: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/17.jpg)
![Page 18: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/18.jpg)
Spring Data e Streams
https://spring.io/blog/2015/03/26/what-s-new-in-spring-data-fowler
![Page 19: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/19.jpg)
Usando Streams para achar uma camiseta P
![Page 20: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/20.jpg)
![Page 21: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/21.jpg)
O código ainda não está intuitivo
![Page 22: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/22.jpg)
LambdaMethod Reference
Alguns recursos do Java 8 Para melhorar o código
![Page 23: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/23.jpg)
![Page 24: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/24.jpg)
Mais detahes sobre a api
A ordem dos métodos na hora de criar seu pipeline podeafetar performance.
Lazy Evaluation
![Page 25: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/25.jpg)
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
![Page 26: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/26.jpg)
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.
![Page 27: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/27.jpg)
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)
![Page 28: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/28.jpg)
Performance
Um for convencional pode ser a solução mais rápida emalguns casos
Parallel Stream
![Page 29: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/29.jpg)
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.
![Page 30: TDC2016SP - Aperfeiçoando seu código com Stream](https://reader033.vdocuments.mx/reader033/viewer/2022052418/58a465951a28abb8288b5f6b/html5/thumbnails/30.jpg)
Obrigado!
@yagosilvadev
https://github.com/yago-silva
http://meetup.com/friendstechday