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
filterpara selecionar números pares. - Use
mappara elevar ao quadrado. - Use
reduceousumpara 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
- Criamos uma lista de inteiros de 1 a 6.
- O método
stream()cria um fluxo de dados a partir da lista. filter(n -> n % 2 == 0)é uma operação intermediária que mantém apenas os números pares (2, 4, 6).mapToInt(n -> n * n)transforma cada número par em seu quadrado (4, 16, 36).sum()é uma operação terminal que soma todos os elementos do stream, resultando em 56.- 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
mapem vez demapToInte depois tentarsum():mapretornaStream<Integer>, que não temsum(). É precisomapToIntpara obter umIntStream. - 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