ANC - Analista em Computação - Ênfase em Programação de Sistemas na Tecnologia Java
Analise o seguinte trecho de código Java:import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class Iteracao {public static void main(String[] args) {Map <Integer, String> produto = new HashMap<Integer, String>();produto.put(1, "Camisa");produto.put(2, "Calça");Analise as assertivas abaixo e assinale a alternativa correta para imprimir, na saída padrão, a relação apenas dos nomes dos produtos do HashMap produto.I. for (Map.Entry< p:produto.entrySet()) {System.out.println(p.getValue());}II. Iterator<Map.Entry<Integer, String>> produtos = produto.entrySet().iterator();while (produtos.hasNext()) {Map.Entry<Integer, String> p = produtos.next();System.out.println(p.getValue());}III. produto.forEach((value) -> {System.out.println(value);});
ATodas estão corretas.
BTodas estão incorretas.
CApenas I e II estão corretas.
DApenas I e III estão corretas.
EApenas II e III estão corretas.
Revelar gabarito e comentário▾
GabaritoC — Apenas I e II estão corretas.
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”.
Iteração em HashMap no Java
Gabarito: letra C. Apenas as assertivas I e II estão corretas. A assertiva I, embora com pequeno erro de sintaxe na transcrição, representa corretamente um enhanced for sobre entrySet; a assertiva II usa Iterator corretamente; a assertiva III está errada porque o método forEach do HashMap exige dois parâmetros (chave e valor).
A questão testa as diferentes formas de percorrer um Map e acessar seus valores.
Assertiva I — ✅ Correta (considerando a intenção)
O código for (Map.Entry< p:produto.entrySet()) { ... } provavelmente deveria ser for (Map.Entry<Integer, String> p : produto.entrySet()). Apesar do pequeno erro de digitação, a estrutura do enhanced for com entrySet() é uma forma válida de iterar e acessar p.getValue(). Portanto, a assertiva é considerada correta pela banca.
Assertiva II — ✅ Correta
Iterator<Map.Entry<Integer, String>> produtos = produto.entrySet().iterator();
while (produtos.hasNext()) {
Map.Entry<Integer, String> p = produtos.next();
System.out.println(p.getValue());
}
Esta é a forma clássica de iteração com Iterator, perfeitamente válida.
O método forEach da interface Map espera um BiConsumer<? super K, ? super V>, ou seja, uma função que recebe dois argumentos: chave e valor. Fornecer apenas um argumento (o valor) causa erro de compilação. A forma correta seria produto.forEach((k, v) -> System.out.println(v)).
NÃO CAIA NESSA!
A banca explora a confusão entre Collection.forEach (que recebe Consumer) e Map.forEach (que recebe BiConsumer). No HashMap, o método forEach é herdadado de Map, não de Collection. Cuidado para não usar lambda com um único parâmetro.
Gabarito: letra C — apenas as assertivas I e II estão corretas.