Casa do Código - Livros e Tecnologia

  • Programação
  • Lógica
  • Java
  • .NET
  • PHP
  • Games
  • OO
  • Funcional
  • Python
  • Outros
  • Todos
  • Mobile
  • iOS
  • Android
  • Multiplataforma
  • Outros
  • Todos
  • Front-end
  • HTML e CSS
  • JavaScript
  • Outros
  • Todos
  • Infraestrutura
  • Web
  • Dados
  • Outros
  • Todos
  • Business
  • Startups
  • Marketing Digital
  • Gestão
  • Agile
  • Outros
  • Todos
  • Design & UX
  • Você tem 0 itens na sacola 0 Abrir navegação por categorias e busca Ir para ao topo da página

    Use o código e tenha 10% de desconto!

    Java 8 Prático Lambdas, Streams e os novos recursos da linguagem

    Paulo Silveira, Rodrigo Turini
    Livro de Java 8

    *Você terá acesso às futuras atualizações do livro.

    Capa

    Java 8 Prático

    "À família Alexandre Vulcano" "À minha amada esposa"

    Agradecimentos

    Foi um desafio escrever um livro durante seis meses em que o JDK8 final ainda não existia.

    Fica um agradecimento a todos que nos ajudaram com dúvidas, sugestões e participações na lista. Alberto Souza, Francisco Sokol, Guilherme Silveira, Michael Nascimento e Osvaldo Duoderlein são alguns deles. Agradecimento especial a Alexandre Aquiles, pelas correções e sugestões importantes durante a detalhada revisão.

    Um muito obrigado a todos os desenvolvedores do JDK8, que em muitas vezes responderam nossas dúvidas prontamente. Destaque para o Brian Goetz, líder do projeto Lambda e sempre muito solícito.

    Um abraço a todos da Caelum, do Alura e da Casa do Código. São equipes que nos incentivam todos os dias a investigar novas tecnologias, paradigmas e bibliotecas.

    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
    Capítulo1

    Java 8

    São praticamente 20 anos de Java desde o lançamento de sua primeira versão.

    Apenas em 2004, com a chegada do Java 5, houve mudanças significativas na linguagem. Em especial generics, enums e anotações.

    Com a chegada do Java 8, em 2014, isso acontece mais uma vez. Novas possibilidades surgem com a entrada do lambda e dos method references, além de pequenas mudanças na linguagem. A API de Collections, na qual as interfaces principais são as mesmas desde 1998, recebe um significativo upgrade com a entrada dos Streams e dos métodos default.

    Tudo isso será extensivamente praticado durante o livro. É hora de programar. Você deve baixar e instalar o Java 8:

    http://www.oracle.com/technetwork/java/javase/downloads/

    E pode acessar seu javadoc aqui:

    http://docs.oracle.com/javase/8/docs/api/

    O Eclipse possui suporte para o Java 8 a partir da versão Luna (4.4). O Kepler (4.3) precisa do seguinte update:

    https://wiki.eclipse.org/JDT/Eclipse_Java_8_Support_For_Kepler

    O Eclipse ainda possui alguns pequenos bugs para realizar inferências mais complicadas. Netbeans e IntelliJ tem suas versões atualizadas para Java 8.

    Para fixar a sintaxe, você pode optar por realizar os testes e exemplos do livro com um simples editor de texto.

    1.1 - Um balde de água morna?

    Se você está esperando algo tão poderoso quanto em Scala, Clojure e C#, certamente sairá decepcionado. O legado e a idade do Java, além da ausência de value types e reificação nos generics, impedem o uso de algumas estratégias. O time de desenvolvedores da linguagem tem também grande preocupação em deixar a sintaxe sempre simples, evitando formas obscuras que trariam pequenos ganhos. Na nossa opinião, faz bastante sentido.

    Ao mesmo tempo é impressionante o que foi possível atingir com o lançamento dessa nova versão. Você vai se surpreender com alguns códigos e abordagens utilizadas. O foco é não quebrar a compatibilidade do código antigo e ser o menos intrusivo possível nas antigas APIs. Os Streams, que serão vistos quase que a exaustão, certamente têm um papel crucial nessa elegante evolução.

     

    O que ficou de fora do Java 8?

     

    Para quebrar melhor a especificação do Java 8 em tarefas menores, foram criadas as JEPs: JDK Enhancement Proposals. É uma ideia que nasceu dos PEPs, proposta similar da comunidade Python. A JEP 0 é uma lista com todas essas propostas:

    http://openjdk.java.net/jeps/0

    Como você pode ver, são muitas as novidades no JDK8. Infelizmente nem todas tiveram tempo suficiente para amadurecer. Entre as JEPs propostas, os Value Objects ficaram de fora:

    http://openjdk.java.net/jeps/169

    Assim como o uso de literais para trabalhar com coleções:

    http://openjdk.java.net/jeps/186

    Entre outras ideias que ficaram de fora, temos diversas melhorias aos Garbage Collectors já embutidos, assim como a possível reificação dos generics.

    De qualquer maneira, a maioria absoluta das JEPs sobreviveu até o lançamento da versão final. Veremos as principais mudanças da linguagem, assim como as novas APIs, no decorrer do livro.

    1.2 - Acesse o código desse livro e discuta com a gente!

    O código-fonte para cada capítulo pode ser encontrado aqui:

    https://github.com/peas/java8

    É claro que indicamos que você mesmo escreva todo o código apresentado no livro, para praticar a API e a sintaxe, além de realizar testes diferentes dos sugeridos.

    Há uma lista de discussão por onde você pode conversar com a gente, mandar sugestões, críticas e melhorias:

    https://groups.google.com/forum/#!forum/java8-casadocodigo

    Se preferir, você pode tirar dúvidas no fórum do GUJ:

    http://www.guj.com.br/

    Dados do produto

    Número de páginas:
    151
    ISBN:
    978-85-66250-46-6
    Data publicação:
    03/2014
    Fórum de discussões

    Compartilhe!

    Compartilhe no Facebook Compartilhe no Twitter

    *Você terá acesso às futuras atualizações do livro.

    altLogoFooter

    Links da
    Casa do Código

    • Meus ebooks
    • Sobre a Casa do Código
    • Todos os livros
    • Nossas coleções
    • Quero escrever um livro ou fazer parceria
    • Perguntas Frequentes
    • Política de Privacidade

    Nas redes sociais

    • /CasaDoCodigo
    • @casadocodigo
    • @casadocodigo

    Receba novidades e lançamentos

    Este site aceita

    • pag seguro
    • paypal

    Grupo Alura

    • Educação em Tecnologia

      • FIAP
      • Casa do Código
      • PM3 - Cursos de Produto
    • Mais Alura

      • Alura Start
      • Alura Língua
      • Alura Para Empresas
      • Alura LATAM
    • Comunidade

      • Tech Guide
      • 7 days of code
      • Hipsters ponto Jobs
    • Podcasts

      • Hipsters ponto Tech
      • Dev sem Fronteiras
      • Layers ponto Tech
      • Like a Boss
      • Scuba Dev