3. 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?
7. 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!
8. Não estamos usando da melhor maneira os
recursos que a máquina oferece
Problemas nessa implementação:
Código não intuitivo
13. As Coleções definem como os dados devem ser
armazenados (lista, mapa, set, etc)
Os Streams definem o que vai ser feito com os dados
Streams VS Coleções
14. A api de streams aproxima o dev Java do mundo funcional
trazendo conceitos como map reduce, etc. O próprio
Stream é uma mônade.
Programação funcional no mundo Java
24. Mais detahes sobre a api
A ordem dos métodos na hora de criar seu pipeline pode
afetar performance.
Lazy Evaluation
25. Lazy Evaluation
Streams podem ser infinitos por isso é necessário avaliar o
pipeline de forma lazy.
Intermediate and Terminal methods
Pode trazer ganhos de performance. Exemplos: Short
Circuit, pegar dados do banco de forma Lazy
26. Intermediate Operations
Todas as operações da api de stream que tem como
retorno um objeto do tipo stream (filter, map, distinct, skip,
sorted, limit, etc)
São avaliadas de maneira lazy, somente após a chamada de
uma terminal operation.
27. Terminal Operations
Todas as operações da api de stream sem retorno ou que
tem como retorno um objeto de um tipo diferente de
Stream
São avaliadas de maneira eager e finalizam a configuração
do pipeline de execução.
Collectors (toList, toSet, groupBy)
29. Parallel Stream
Não necessariamente vai processar mais rápido só por
realizar processamento em parallelo
Pode ser mais rápido em casos onde o processamento de
cada elemento tenha algum passo demorado
Não é aconselhável em ambientes WEB.