🚀 Capítulo 08: Camadas de Sonhos (Tema: Inception)

NOTE

Este capítulo utiliza a temática de Inception para explicar as expressões Lambdas e a API de Streams em Java. Aprenda a processar listas de dados em várias camadas!


1. 🎯 Objetivo da Aula

Compreender o conceito de Programação Funcional em Java, aprendendo a usar as expressões Lambdas e a API de Streams para filtrar e transformar coleções de dados de forma elegante.

2. 🏢 O Cenário Prático (Seu Desafio)

No filme Inception (A Origem), a equipe de Dom Cobb entra em sonhos dentro de sonhos, criando várias camadas de realidade. Em cada camada, eles filtram o que não importa (as projeções do subconsciente) e transformam o ambiente para alcançar o objetivo final.

No Java tradicional, para filtrar uma lista de Pokémons e pegar apenas os que têm mais de de ataque, nós precisaríamos criar um loop for gigante, criar uma lista nova vazia e ir adicionando um por um com um if. Uma trabalheira!

  • Mas a partir do Java 8, nós ganhamos superpoderes: as Lambdas e as Streams!
  • Elas permitem que você processe listas de dados como se estivesse passando por camadas de sonhos, aplicando filtros e transformações em uma única linha de código. Seu desafio é dominar essas camadas!

🧠 Fundamentos: A Teoria Traduzida

🐑 1. O que são Lambdas?

São funções anônimas (sem nome) e super curtas. Em vez de criar um método inteiro, você escreve apenas a lógica. A seta -> separa os parâmetros da ação!

  • Exemplo: (x) -> x > 50 (Leia-se: “Pegue o x e veja se ele é maior que 50”).

🌊 2. A API de Streams:

Uma “Stream” é um fluxo de dados. Você pega uma lista comum e a transforma em uma Stream para poder usar métodos mágicos como:

  • .filter(): Filtra os elementos (como uma peneira).
  • .map(): Transforma os elementos (muda o valor ou o tipo).
  • .forEach(): Executa uma ação para cada elemento final.

4. 📖 Exemplo Guiado: Filtrando a Lista

Vamos pegar uma lista de números e filtrar apenas os que são maiores que , imprimindo-os na tela:

import java.util.Arrays;
import java.util.List;
 
public class CamadasDeSonho {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(5, 12, 8, 20, 3);
 
        System.out.println("Números maiores que 10:");
        
        // Entrando na Stream e aplicando as camadas!
        numeros.stream()
               .filter(n -> n > 10) // Camada 1: Filtra
               .forEach(n -> System.out.println(n)); // Camada 2: Imprime
    }
}

5. 🛠️ Prática Obrigatória 1: Entendendo a Lambda

Imagine a seguinte linha de código de uma Stream de textos: .filter(nome -> nome.startsWith("A"))

  1. O que essa linha está fazendo com a lista de nomes? Quem ela deixa passar para a próxima camada?

6. 🛠️ Prática Obrigatória 2: Escrevendo a Lambda

  1. Escreva a expressão Lambda (usando a setinha ->) que recebe uma variável chamada idade e verifica se ela é maior ou igual a .

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 08 Java_Inception) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

spec_backend_com_java_e_springboot/
├── capitulos/
│   └── capitulo_08_inception.md

💡 Checkpoint de Lógica

As Streams não alteram a lista original! Elas criam um fluxo separado. A sua lista original de Pokémons continuará intacta após o uso da Stream.

10. 🔥 Desafio de Fixação

Pesquise o que faz o método .collect(Collectors.toList()) no final de uma Stream no Java.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Ela está filtrando a lista para deixar passar apenas os nomes que começam com a letra “A” maiúscula! Gabarito da Prática 2:
  2. idade -> idade >= 18

Capitulo Anterior | Proximo Capitulo