Java 8 Prático Lambdas, Streams e os novos recursos da linguagem
Paulo Silveira, Rodrigo TuriniConteúdo
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.
Ainda curioso para entender melhor as possibilidades? Se queremos ordenar todos os usuários de uma List por pontos, e filtrar apenas os que possuem mais de 100, faríamos assim no Java 7:
É o problema vertical do Java! Muito código de boilerplate para uma transformação simples. Como fica no Java 8?
O livro vai muito mais longe na manipulação de coleções e datas. Conheça e comece a utilizar as novidades em seu projeto.
Sumário
- 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 @FunctionalInterface
- 3.4 Indo mais a fundo: primeiros detalhes
- 4 Default Methods
- 4.1 O método forEach na interface Iterable
- 4.2 A interface Consumer não tem só um método!
- 4.3 Mais um novo método em Collection: removeIf
- 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 toList em Stream?
- 7.6 Liste apenas os pontos de todos os usuários com o map
- 7.7 IntStream 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 FlatMap
- 9 Mapeando, particionando, agrupando e paralelizando
- 9.1 Coletores gerando mapas
- 9.2 groupingBy e partitioningBy
- 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 BigDecimal 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
Autores
Paulo Silveira
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
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 JavaEE. 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.
Dados do produto
- Número de páginas:
- 151
- ISBN:
- 978-85-66250-46-6
- Data publicação:
- 03/2014