tdc2016sp - aperfeiçoando seu código com stream

30
THE DEVELOPERS CONFERENCE JAVA 8 STREAMS @yagosilvadev

Upload: tdc-globalcode

Post on 15-Feb-2017

60 views

Category:

Education


1 download

TRANSCRIPT

Page 1: TDC2016SP - Aperfeiçoando seu código com Stream

THEDEVELOPERSCONFERENCE

JAVA 8 STREAMS

@yagosilvadev

Page 2: TDC2016SP - Aperfeiçoando seu código com Stream

Yago Silva

@yagosilvadev

https://github.com/yago-silva

http://meetup.com/friendstechday

Page 3: TDC2016SP - Aperfeiçoando seu código com Stream

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

NÃO GANHEI UMA CAMISETA P

Page 5: TDC2016SP - Aperfeiçoando seu código com Stream

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

SHOW ME THE CODE

Page 7: TDC2016SP - Aperfeiçoando seu código com Stream

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

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
Page 10: TDC2016SP - Aperfeiçoando seu código com Stream

O que são Streams ?

Page 11: TDC2016SP - Aperfeiçoando seu código com Stream
Page 12: TDC2016SP - Aperfeiçoando seu código com Stream

Stream é o "caminho" por onde passam os dados

Page 13: TDC2016SP - Aperfeiçoando seu código com Stream

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

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
Page 16: TDC2016SP - Aperfeiçoando seu código com Stream

Como Criar um Stream ?

Page 17: TDC2016SP - Aperfeiçoando seu código com Stream
Page 18: TDC2016SP - Aperfeiçoando seu código com Stream

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

Usando Streams para achar uma camiseta P

Page 20: TDC2016SP - Aperfeiçoando seu código com Stream
Page 21: TDC2016SP - Aperfeiçoando seu código com Stream

O código ainda não está intuitivo

Page 22: TDC2016SP - Aperfeiçoando seu código com Stream

LambdaMethod Reference

Alguns recursos do Java 8 Para melhorar o código

Page 23: TDC2016SP - Aperfeiçoando seu código com Stream
Page 24: TDC2016SP - Aperfeiçoando seu código com Stream

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

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

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

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

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

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

Obrigado!

@yagosilvadev

https://github.com/yago-silva

http://meetup.com/friendstechday