Questão nº 79
Questão de Tecnologia da Informação · FGV TJ-AP 2024 (nº 79)
Considere o seguinte código em 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
Streams em Java permitem processar sequências de dados de forma declarativa, aplicando operações como filtragem, transformação e agregação (coleta) de maneira eficiente e legível. As operações são encadeadas e executadas passo a passo sobre os elementos do fluxo.
Passo a passo da execução:
Map.of("11","Amapá","13","Itaubal","15","Cutias"): Cria um mapa com as entradas.cidades.entrySet().stream(): Cria um fluxo deMap.Entry(pares chave-valor)..sorted((e1, e2) -> e1.getKey().compareTo(e2.getKey())): Ordena os pares pelo código (chave) em ordem crescente ("11", "13", "15"). O fluxo fica:("11", "Amapá"),("13", "Itaubal"),("15", "Cutias")..map(e-> Arrays.asList(e.getKey(), e.getValue())): Transforma cada par em uma lista de duas strings. O fluxo fica:["11", "Amapá"],["13", "Itaubal"],["15", "Cutias"]..map(e-> String.join(", ", e)): Transforma cada lista em uma única string, unindo os elementos com ", ". O fluxo fica:"11, Amapá","13, Itaubal","15, Cutias"..collect(Collectors.joining(": ")): Coleta as strings resultantes, unindo-as com ": ".
O resultado final é "11, Amapá: 13, Itaubal: 15, Cutias".
(A) Incorreta: A ordem está errada e o formato de união dos elementos também.
(B) Incorreta: A ordem está errada e o formato de união dos elementos também.
(C) Correta: O código ordena as entradas pela chave, transforma cada par (chave, valor) em uma string "chave, valor" e depois une essas strings com ": ".
(D) Incorreta: Esta alternativa inverte os delimitadores. Ela sugere que a união interna (chave e valor) usa ": " e a união externa (entre os pares) usa ", ", o que é o oposto do que o código faz (String.join(", ", e) para o par e Collectors.joining(": ") para os pares). Armadilha da banca: Confunde a função dos dois delimitadores (", " e ": ") usados em diferentes etapas do processamento.
(E) Incorreta: A ordem está errada (seria decrescente) e o formato de união dos elementos também.
Fonte: FGV TJ-AP 2024 Analista Judiciário - TI - Desenvolvimento de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.