Questão nº 79
Questão de Tecnologia da Informação · FGV TJ-AP 2024 (nº 79)
Considere o seguinte código em Java:
```java
Map<String, String> cidades = Map.of("11","Amapá","13","Itaubal","15","Cutias");
String texto = cidades.entrySet().stream().sorted(
(e1, e2) -> e1.getKey().compareTo(e2.getKey()))
.map(e-> Arrays.asList(e.getKey(), e.getValue()))
.map(e-> String.join(", ", e))
.collect(Collectors.joining(": "));
System.out.println(texto);
```
Ao ser executado com as importações necessárias, o código Java acima imprime na saída padrão:
- ACutias: 15, Amapá: 11, Itaubal: 13
- BAmapá: 11, Cutias: 15, Itaubal: 13
- C11, Amapá: 13, Itaubal: 15, Cutias (alternativa correta)
- D11: Amapá, 13: Itaubal, 15: Cutias
- E15: Cutias, 13: Itaubal, 11: Amapá
Resposta comentada
Gabarito Alternativa C
Java Streams permitem processar coleções de dados de forma declarativa e sequencial, aplicando uma série de operações para transformar e combinar os elementos.
- (A) Incorreta: A ordem dos elementos está incorreta (não segue a ordenação crescente das chaves) e o formato final não corresponde à lógica de junção definida no código.
- (B) Incorreta: A ordem dos elementos está incorreta e o formato final não corresponde à lógica de junção definida no código.
- (C) Correta: O código executa as seguintes etapas:
cidades.entrySet().stream(): Cria um stream de pares chave-valor (Map.Entry)..sorted((e1, e2) -> e1.getKey().compareTo(e2.getKey())): Ordena os pares pela chave em ordem crescente ("11", "13", "15"). Os pares ficam:("11", "Amapá"),("13", "Itaubal"),("15", "Cutias")..map(e-> Arrays.asList(e.getKey(), e.getValue())): Transforma cada par em uma lista de duas strings. Ex:List.of("11", "Amapá")..map(e-> String.join(", ", e)): Transforma cada lista em uma única string, unindo os elementos com", ". Ex:"11, Amapá","13, Itaubal","15, Cutias"..collect(Collectors.joining(": ")): Une todas as strings resultantes da etapa anterior em uma única string, usando": "como delimitador entre elas. Assim,"11, Amapá"é unido a"13, Itaubal"por": ", e o resultado é unido a"15, Cutias"por": ", gerando"11, Amapá: 13, Itaubal: 15, Cutias".
- (D) Incorreta: Esta alternativa sugere que a junção interna (chave e valor) seria com
": "e a junção externa (entre os pares) seria com", ". O código faz o oposto: a junção interna é com", "(String.join(", ", e)) e a junção externa é com": "(Collectors.joining(": ")). Essa é a armadilha da banca, pois confunde a ordem e o tipo de delimitador usado nas duas operações de junção. - (E) Incorreta: A ordem dos elementos está invertida (decrescente das chaves) e o formato final não corresponde à lógica de junção definida no código.
Fonte: FGV TJ-AP 2024 Analista Judiciário - TI - Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.