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 emfilter. - 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
- Criamos uma lista imutável com
Arrays.asListcontendo números de 1 a 8. - Chamamos
stream()para obter um fluxo de dados que permite operações funcionais. - Usamos
filtercom a lambdan -> n % 2 == 0, que retornatruepara números pares. - O método
forEachrecebe 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, poisListnão temfilter. É 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ãon -> n % 2 == 0. - Confundir
forEachcommap:forEachexecuta uma ação e não retorna valor;maptransforma elementos. Aqui queremos apenas imprimir, entãoforEaché 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