ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
Por um Java mais funcional
1. Por um Java mais funcional
Christian Reichel
@chrisreichel
2. Motivação
• Maioria dos projetos são problemas de
gerenciamento de informações
• Expressividade
• Concorrência
* http://mail.openjdk.java.net/pipermail/lambda-dev/2011-August/003877.html
6. Recursão
• Não há estados mutáveis
• Em Java é ruim (cada chamada gera um
overhead grande)
• forEach: sem estados mutáveis e sem
recursão
7. Lazy Evaluation
• Evitar computar um resultado até
o ponto em que ele realmente
seja necessário
• Permite definir estruturas
infinitas: ex conjunto dos
números inteiros
8. Funções e Closures
• Classes anônimas podem
ser consideradas funções
anônimas
• Wrapper de Função
• Bibliotecas funcionais em
Java funcionam assim:
Guava, Functional Java ...
9. Closures no Java 8
* http://blog.caelum.com.br/trabalhando-com-closures-no-java-8/
* http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-3.html
10. Combinators
• Operações básicas para lidar com coleções
• filter
• map
• Listas são as estruturas de dados centrais
• A combinação do map e do reduce
inspiraram a abordagem MapReduce do
Hadoop
11. filter
Cria uma nova coleção mantendo somente os
elementos que foram filtrados
12. map
Cria uma nova coleção onde cada elemento passa
por uma transformação
* O google guava chama o map de transform...
13. Estruturas de dados
persistentes
• Coleções imutáveis
• Modificações geram
cópias
• Custoso para grandes
estruturas
14. Estruturas de dados
persistentes
• Compartilhamento de
estrutura
• Implementação baseada
em Árvores
• Interface pode ser uma
List, Map, ...