Fácil Java

Soma dos quadrados dos números pares

Enunciado

Dada uma lista de inteiros, use streams para filtrar os números pares, calcular o quadrado de cada um e somar todos os resultados. Imprima a soma.

Requisitos

  • Use filter para selecionar números pares.
  • Use map para elevar ao quadrado.
  • Use reduce ou sum para somar.
  • Imprima o resultado final.

Código inicial

import java.util.*;
import java.util.stream.*;

public class ExercicioFacil {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6);
        // Complete aqui
    }
}

Saída esperada

Soma dos quadrados dos pares: 56
Ver dica

Use mapToInt para transformar em IntStream e então sum().

Mostrar solução
import java.util.*;
import java.util.stream.*;

public class ExercicioFacil {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6);
        int soma = numeros.stream()
                .filter(n -> n % 2 == 0)      // mantém apenas pares
                .mapToInt(n -> n * n)         // eleva ao quadrado
                .sum();                       // soma todos
        System.out.println("Soma dos quadrados dos pares: " + soma);
    }
}

Passo a passo

  1. Criamos uma lista de inteiros de 1 a 6.
  2. O método stream() cria um fluxo de dados a partir da lista.
  3. filter(n -> n % 2 == 0) é uma operação intermediária que mantém apenas os números pares (2, 4, 6).
  4. mapToInt(n -> n * n) transforma cada número par em seu quadrado (4, 16, 36).
  5. sum() é uma operação terminal que soma todos os elementos do stream, resultando em 56.
  6. O resultado é impresso.

Por que funciona

O pipeline de stream processa cada elemento individualmente, aplicando as operações na ordem. Como filter e mapToInt são intermediárias, elas são executadas apenas quando sum() (terminal) é chamada. Isso demonstra o conceito de streams preguiçosos: nada acontece até a operação terminal.

Erros comuns

  • Esquecer de chamar uma operação terminal: o stream não é executado e nada é impresso.
  • Usar map em vez de mapToInt e depois tentar sum(): map retorna Stream<Integer>, que não tem sum(). É preciso mapToInt para obter um IntStream.
  • Modificar a lista original durante a execução do stream: isso pode causar ConcurrentModificationException.

Outra forma de resolver

Usar reduce diretamente:

int soma = numeros.stream()
        .filter(n -> n % 2 == 0)
        .map(n -> n * n)
        .reduce(0, Integer::sum);

Essa forma é útil quando se quer mais controle sobre a operação de redução.

Saída esperada

Soma dos quadrados dos pares: 56