tdc2016sp - aperfeiçoando seu código com stream

Post on 15-Feb-2017

60 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related