Fácil Java

Filtrar números pares com lambda

Enunciado

Crie uma lista de inteiros e use uma lambda para filtrar apenas os números pares. Imprima cada um no formato Par: X.

Requisitos

  • Use uma lambda com Predicate<Integer> ou diretamente em filter.
  • A lista deve conter pelo menos 5 números.
  • Imprima apenas os pares, um por linha.

Código inicial

import java.util.Arrays;
import java.util.List;

public class FiltraPares {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
        // Seu código aqui
    }
}

Saída esperada

Par: 2
Par: 4
Par: 6
Par: 8
Ver dica

Use numeros.stream().filter(n -> n % 2 == 0).forEach(...).

Mostrar solução
import java.util.Arrays;
import java.util.List;

public class FiltraPares {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
        // Lambda que verifica se o número é par
        numeros.stream()
               .filter(n -> n % 2 == 0)
               .forEach(n -> System.out.println("Par: " + n));
    }
}

Passo a passo

  1. Criamos uma lista imutável com Arrays.asList contendo números de 1 a 8.
  2. Chamamos stream() para obter um fluxo de dados que permite operações funcionais.
  3. Usamos filter com a lambda n -> n % 2 == 0, que retorna true para números pares.
  4. O método forEach recebe outra lambda que imprime cada elemento aprovado no formato pedido.

Por que funciona

A lambda n -> n % 2 == 0 implementa a interface funcional Predicate<Integer>, cujo método test retorna um booleano. O filter usa esse predicado para decidir quais elementos passam adiante. Já a lambda em forEach implementa Consumer<Integer>, executando uma ação para cada elemento. Isso demonstra o poder das lambdas ao simplificar o uso de interfaces funcionais.

Erros comuns

  • Esquecer o tipo do stream: numeros.filter(...) não compila, pois List não tem filter. É preciso chamar .stream() antes.
  • Usar bloco sem return: n -> { if (n % 2 == 0) return true; } causa erro de compilação porque nem todos os caminhos retornam valor. Prefira a expressão n -> n % 2 == 0.
  • Confundir forEach com map: forEach executa uma ação e não retorna valor; map transforma elementos. Aqui queremos apenas imprimir, então forEach é o correto.

Outra forma de resolver

Usar um loop for tradicional com if:

for (int n : numeros) {
    if (n % 2 == 0) System.out.println("Par: " + n);
}

Essa abordagem é preferível quando não se deseja usar streams ou quando a lógica é mais complexa e menos adequada a lambdas.

Saída esperada

Par: 2
Par: 4
Par: 6
Par: 8