Você é um programador com boa fluência em Java? Está na hora de dar mais um passo. Quase 20 anos após sua primeira versão, um novo Java surge com novidades importantes. Entre os principais recursos, a linguagem recebe default methods, method references e lambdas. São conceitos simples mas que trazem importantes possibilidades. Durante o livro exploraremos esses e outros avanços. Sempre com exemplos práticos e apresentando onde utilizá-los, migrando o código legado do dia a dia para o novo paradigma funcional do Java 8. Com esse tripé de conceitos, a API conseguiu evoluir de uma maneira interessante. Os pacotes java.util.stream e java.util.function serão explorados com profundidade, apresentando formas sucintas para trabalhar com coleções e outros tipos de dados. Streams e Collectors farão parte da sua rotina e serão tão essenciais nas suas aplicações quanto já são as Collections e o java.io. Por último, veremos como a nova API de java.time vem mudar da água pro vinho a forma de trabalhar com datas e horários.
Spis treści
1 – Java 8
1.1 – Um balde de água morna?
1.2 – Acesse o código desse livro e discuta com a gente!
2 – Olá, Lambda!
2.1 – Loops da maneira antiga e da maneira nova
2.2 – Que entre o Lambda!
3 – Interfaces funcionais
3.1 – Outro exemplo: listeners
3.2 – Sua própria interface funcional
3.3 – A anotação @Functional Interface
3.4 – Indo mais a fundo: primeiros detalhes
4 – Default Methods
4.1 – O método for Each na interface Iterable
4.2 – A interface Consumer não tem só um método!
4.3 – Mais um novo método em Collection: remove If
4.4 – Herança múltipla?
5 – Ordenando no Java 8
5.1 – Comparators como lambda
5.2 – O método List.sort
5.3 – Métodos estáticos na interface Comparator
5.4 – Conhecendo melhor o Comparator.comparing
5.5 – Ordenando por pontos e o autoboxing
6 – Method References
6.1 – Tornando todos os usuários moderadores
6.2 – Comparando de uma forma ainda mais enxuta
6.3 – Compondo comparators
6.4 – Referenciando métodos de instância
6.5 – Referenciando métodos que recebem argumentos
6.6 – Referenciando construtores
6.7 – Outros tipos de referências
7 – Streams e Collectors
7.1 – Tornando moderadores os 10 usuários com mais pontos
7.2 – Streams: tornando moderadores os usuários com mais de 100 pontos
7.3 – Como obter de volta uma Lista?
7.4 – Collectors
7.5 – Avançado: por que não há um to List em Stream?
7.6 – Liste apenas os pontos de todos os usuários com o map
7.7 – Int Stream e a família de Streams
7.8 – O Optional em java.util
8 – Mais operações com Streams
8.1 – Ordenando um Stream
8.2 – Muitas operações no Stream são lazy!
8.3 – Qual é a vantagem dos métodos serem lazy?
8.4 – Enxergando a execução do pipeline com peek
8.5 – Operações de redução
8.6 – Conhecendo mais métodos do Stream
8.7 – Streams primitivos e infinitos
8.8 – Praticando o que aprendemos com java.nio.file.Files
8.9 – Flat Map
9 – Mapeando, particionando, agrupando e paralelizando
9.1 – Coletores gerando mapas
9.2 – grouping By e partitioning By
9.3 – Executando o pipeline em paralelo
9.4 – Operações não determinísticas e ordered streams
10 – Chega de Calendar! Nova API de datas
10.1 – A java.time vem do Joda Time
10.2 – Trabalhando com datas de forma fluente
10.3 – Enums no lugar de constantes
10.4 – Formatando com a nova API de datas
10.5 – Datas inválidas
10.6 – Duração e Período
10.7 – Diferenças para o Joda Time
11 – Um modelo de pagamentos com Java 8
11.1 – Uma loja de digital goodies
11.2 – Ordenando nossos pagamentos
11.3 – Reduzindo Big Decimal em somas
11.4 – Produtos mais vendidos
11.5 – Valores gerados por produto
11.6 – Quais são os produtos de cada cliente?
11.7 – Qual é nosso cliente mais especial?
11.8 – Relatórios com datas
11.9 – Sistema de assinaturas
12 – Apêndice: mais Java 8 com reflection, JVM, APIs e limitações
12.1 – Novos detalhes na linguagem
12.2 – Qual é o tipo de uma expressão Lambda?
12.3 – Limitações da inferência no lambda
12.4 – Fim da Permgen
12.5 – Reflection: parameter names
13 – Continuando seus estudos
13.1 – Como tirar suas dúvidas
13.2 – Bibliotecas que já usam ou vão usar Java 8
O autorze
Paulo Silveira, @paulo_caelum, é bacharel e mestre em Ciência da Computação pela USP, possui mais de 10 anos de experiência com desenvolvimento, passando pela Alemanha e pelo IBOPE. Coordena os cursos da Caelum nos cursos de verão da USP. Um dos fundadores do GUJ.com.br e é editor técnico da revista Mundo Java.
Rodrigo Turini é Bacharel em Ciência da Computação e líder técnico na Alura, a plataforma de cursos online do Grupo Caelum. Desenvolve em diferentes linguagens, mas tem um envolvimento muito forte com o Java, sendo membro ativo da JCP e de expert groups do Java EE. Turini participa ativamente da comunidade em blogs, fóruns, listas de discussões e também em eventos nacionais e internacionais. É um dos líderes de desenvolvimento do VRaptor, e contribui para diversos outros projetos e manifestos open source. Gosta de estudar continuamente as melhores práticas da orientação a objetos, programação funcional e reativa.