Pular para o conteúdo principal

Questão de Programação — Java — FGV 2026

ProgramaçãoJava
Código
fg128609
Banca
FGV
Órgão
AMAZUL
Ano
2026
Nível
Superior
Cargo
Analista de Desenvolvimento de Sistemas
A API de Streams do Java 8 introduziu uma nova forma de processar coleções de dados de maneira declarativa e, opcionalmente, paralela. Considere o seguinte trecho de código:Q44.png 360×88Assinale a opção que apresenta o valor da variável resultado, após a execução deste código.
  1. A12
  2. B24
  3. C42
  4. D36
  5. E18
Revelar gabarito e comentário

GabaritoB — 24

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Resolução

Gabarito: letra B — a conta chega a 24 — alternativa B.

A ideia por trás

A API de Streams do Java 8 permite processar coleções de forma declarativa, encadeando operações em uma pipeline. Uma pipeline tem três partes: a fonte (a lista), as operações intermediárias (que transformam o stream e são 'preguiçosas', só executam quando uma operação terminal é chamada) e a operação terminal (que produz o resultado final).

As operações intermediárias mais comuns são: filter (seleciona elementos que satisfazem um predicado), map (transforma cada elemento), limit (restringe o número de elementos) e sorted (ordena). A operação terminal reduce combina os elementos em um único valor usando uma função de acumulação. No caso, reduce(0, Integer::sum) inicia o acumulador em 0 e soma cada elemento, resultando na soma total.

Esta questão cobra a ordem e a semântica das operações da pipeline. É preciso simular a execução passo a passo, respeitando que as operações intermediárias são aplicadas em sequência, mas de forma 'preguiçosa': o stream processa os elementos um a um, aplicando todas as operações intermediárias antes de passar para o próximo, até que a operação terminal seja satisfeita (no caso, até que limit(3) tenha coletado 3 elementos).

O que a questão dá

  • lista de inteiros: [1, 2, 3, 4, 5, 6, 7, 8] (do código, conforme imagem)

  • operação filter: seleciona números pares

  • operação map: multiplica cada número por 2

  • operação limit: restringe a 3 elementos

  • operação reduce: soma os elementos, começando em 0

O que queremos: o valor da variável resultado após a execução do código

Passo 1 — Selecionar os números pares

A primeira operação da pipeline é o filter, que decide quais elementos passam adiante. Precisamos aplicá-lo primeiro porque ele define o conjunto de elementos que as operações seguintes vão processar.

Por que esta fórmula: filter é uma operação intermediária que recebe um predicado (uma condição) e mantém apenas os elementos que a satisfazem. Aqui, o predicado é 'número par', ou seja, n % 2 == 0.

[2,4,6,8]\boxed{[2, 4, 6, 8]}
NÃO CAIA NESSA!

Esquecer que o filter é aplicado antes do map e do limit, e tentar filtrar depois de transformar.

Passo 2 — Multiplicar cada número por 2

Depois de filtrar, o map transforma cada elemento restante. É importante aplicar o map antes do limit, porque o limit corta a quantidade de elementos, e queremos que o corte aconteça sobre os valores já transformados.

Por que esta fórmula: map é uma operação intermediária que aplica uma função a cada elemento do stream, produzindo um novo stream com os resultados. Aqui, a função é 'multiplicar por 2', ou seja, n -> n * 2.

[4,8,12,16]\boxed{[4, 8, 12, 16]}
NÃO CAIA NESSA!

Aplicar o map antes do filter, o que mudaria completamente o resultado.

Passo 3 — Restringir aos três primeiros elementos

Agora que temos os valores transformados, o limit(3) corta o stream para os três primeiros elementos. Isso é necessário porque a operação terminal reduce vai somar apenas esses três.

Por que esta fórmula: limit é uma operação intermediária que limita o número de elementos do stream. Ela é aplicada após o map, então pega os três primeiros elementos do stream já transformado.

[4,8,12]\boxed{[4, 8, 12]}
NÃO CAIA NESSA!

Aplicar o limit antes do map, o que pegaria os três primeiros números da lista original e depois filtraria e transformaria, resultando em um valor diferente.

Passo 4 — Somar os elementos restantes

A operação terminal reduce combina todos os elementos do stream em um único valor. Aqui, ela soma os três números que sobraram, começando com o acumulador em 0.

Por que esta fórmula: reduce(0, Integer::sum) é uma operação terminal que aplica uma função de acumulação a cada elemento, começando com o valor inicial 0. Integer::sum é uma referência de método que soma dois inteiros.

resultado=0+4+8+12resultado = 0 + 4 + 8 + 12

De onde vem cada valor: 00 = definição: valor inicial do acumulador · 44 = passo 3: primeiro elemento · 88 = passo 3: segundo elemento · 1212 = passo 3: terceiro elemento

resultado=0+4+8+12=24resultado = 0 + 4 + 8 + 12 = \boxed{24}
NÃO CAIA NESSA!

Esquecer de incluir o valor inicial 0, ou somar os elementos antes do limit, o que daria 4 + 8 + 12 + 16 = 40.

Resposta: 24 — alternativa B

Link permanente: /questoes/fg128609