Questão de Programação — Linguagens de programação — FGV 2024
Programação›Linguagens de programação
Código
fg077400
Banca
FGV
Órgão
CVM
Ano
2024
Nível
Superior
Cargo
Analista - Perfil 8 - TI / Sistemas e Desenvolvimento - Tarde
A consultora Fernanda encontrou o método Java a seguir em um código de terceiros.Como Fernanda conhece muito bem as operações de map e reduce do Java, ela logo descobriu que w representa:
Ao desvio padrão do conjunto de valores do HashMap;
Ba média ponderada dos valores do HashMap, considerando as chaves como peso;
Co produtório do conjunto de valores do HashMap;
Da obtenção da chave relacionada à lista de maior valor médio;
Eo somatório dos produtos entre as chaves do HashMap e as listas de valores relacionadas.
Revelar gabarito e comentário▾
GabaritoB — a média ponderada dos valores do HashMap, considerando as chaves como peso;
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”.
Streams e Lambdas em Java: map e reduce
Gabarito: letra B. O método w calcula a média ponderada dos valores do HashMap, usando as chaves como pesos. Isso porque o código combina map (para transformar cada entrada em um produto chave × valor) e reduce (para somar esses produtos), dividindo pelo total das chaves — exatamente a definição de média ponderada.
O código Java em questão utiliza a API de Streams, introduzida no Java 8, que permite processar coleções de forma declarativa e funcional. As operações map e reduce são pilares dessa API: map transforma cada elemento do stream em outro (mantendo a mesma quantidade de elementos), enquanto reduce combina todos os elementos em um único resultado, aplicando uma operação de acumulação.
No caso de um HashMap, cada entrada é um par chave-valor. O map pode ser usado para extrair ou transformar esses pares, e o reduce para agregá-los. A média ponderada é uma operação estatística que multiplica cada valor pelo seu peso, soma esses produtos e divide pela soma dos pesos. No contexto do HashMap, as chaves funcionam como pesos e os valores como os dados a serem ponderados.
Vamos detalhar o raciocínio: se o código faz map de cada entrada para chave * valor e depois reduce com soma, obtém-se o somatório dos produtos. Se, em seguida, divide-se pela soma das chaves (obtida por outro reduce), o resultado é a média ponderada. A alternativa B descreve exatamente esse processo.
A pegadinha aqui é confundir média ponderada com somatório de produtos (alternativa E) ou com produtório (alternativa C). A média ponderada exige a divisão pela soma dos pesos, o que a distingue do simples somatório. Além disso, a alternativa D fala em "chave relacionada à lista de maior valor médio", o que não corresponde a uma operação de agregação numérica simples.
1map: chave × valor
2reduce: soma dos produtos
3reduce: soma das chaves
4Divide: produtos ÷ chaves
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
O desvio padrão é uma medida de dispersão que envolve o cálculo da variância (média dos quadrados das diferenças em relação à média). O código descrito não realiza esse cálculo, pois não há operações de subtração da média nem de elevação ao quadrado. A banca tenta confundir o candidato com um termo estatístico comum, mas a operação de map/reduce descrita não produz desvio padrão.
Alternativa B — ✅ Correta ⟵ GABARITO
A média ponderada é calculada como a soma dos produtos (valor × peso) dividida pela soma dos pesos. No HashMap, as chaves atuam como pesos e os valores como os dados. O map transforma cada entrada em chave * valor, o reduce soma esses produtos, e a divisão pela soma das chaves resulta na média ponderada. Essa é exatamente a operação descrita.
Alternativa C — ❌ Incorreta
O produtório é o produto de todos os valores (multiplicação sucessiva). O código usa reduce com soma, não com multiplicação. A banca troca a operação de soma por produto, o que é um erro conceitual clássico.
Alternativa D — ❌ Incorreta
Esta alternativa descreve uma operação de busca (encontrar a chave cuja lista tem maior média), o que envolveria max ou collect, não map/reduce para agregação numérica. O código não está selecionando uma chave específica, mas calculando um valor agregado.
Alternativa E — ❌ Incorreta
O somatório dos produtos (chave × valor) é apenas uma parte do cálculo da média ponderada — falta a divisão pela soma das chaves. A alternativa descreve o numerador, mas não o denominador, portanto está incompleta e incorreta como descrição do resultado final.
NÃO CAIA NESSA!
A banca explora a confusão entre média ponderada e somatório de produtos. A alternativa E descreve o numerador da média, mas esquece a divisão pelos pesos. Lembre-se: média ponderada = (Σ valor × peso) / (Σ peso).
PEGA ESSA DICA!
Para identificar média ponderada em código com map/reduce, procure por duas operações de reduce: uma para somar os produtos e outra para somar os pesos, seguidas de uma divisão. Se houver apenas uma soma, é somatório simples.