🚀 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"))
- 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
- Escreva a expressão Lambda (usando a setinha
->) que recebe uma variável chamadaidadee verifica se ela é maior ou igual a .
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 08 Java_Inception) e clique em Commit to main. - 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:
- 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:
idade -> idade >= 18