Questão nº 33
Questão de Tecnologia da Informação · FGV CVM 2024 (nº 33)
Ao desenvolver um sistema em Java, Eliana decidiu usar os recursos para suporte ao paradigma funcional presentes na plataforma, como no código a seguir, para ordenar a lista.
```java
List<String> dados =
Arrays.asList("Ana","Luiz","Carlos");
dados.sort(expressão funcional);
```
Para que o código de Eliana funcione, a expressão funcional utilizada deverá ser:
- Alambda a,b : a>b
- B(a,b) => a.compareTo(b)
- C(a,b) -> a.equals(b)
- Dlambda a,b: strcmp(a,b)
- E(a,b) -> a.compareTo(b) (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Um lambda expression (ou expressão lambda) em Java é uma forma concisa de representar uma função anônima, ideal para implementar interfaces funcionais (interfaces com um único método abstrato), como o Comparator usado para ordenar coleções. O método sort de uma List espera um Comparator que define a lógica de comparação entre dois elementos, retornando um número negativo, zero ou positivo para indicar a ordem.
- (A) Incorreta: A sintaxe
lambda a,b : a>bé do Python, não do Java. Além disso,a>bnão é uma comparação válida para objetosStringem Java e retornaria umboolean, enquanto oComparatorespera umint. - (B) Incorreta: A sintaxe
(a,b) => a.compareTo(b)é de funções de seta (arrow functions) do JavaScript, não do Java. Embora a lógicaa.compareTo(b)esteja correta para comparar strings, a sintaxe=>não é aceita em Java. Armadilha da banca: Esta é a alternativa mais tentadora, pois a lógica de comparação (a.compareTo(b)) está correta e a sintaxe é quase igual à do Java, mas o operador=>a torna inválida para Java. - (C) Incorreta: Embora
(a,b) -> a.equals(b)seja uma sintaxe lambda válida em Java, o métodoequalsretorna umboolean(verdadeiro se os objetos são iguais, falso caso contrário), e oComparatorespera umintpara determinar a ordem relativa entre os elementos. Isso resultaria em um erro de compilação e não serviria para ordenar. - (D) Incorreta: A sintaxe
lambda a,b: strcmp(a,b)é do Python e a funçãostrcmpé comumente associada a C/C++, não existindo diretamente em Java para comparação de strings. - (E) Correta: A sintaxe
(a,b) -> a.compareTo(b)é a forma correta de uma expressão lambda em Java. Ela recebe dois parâmetrosaeb(que serãoStrings) e usa o métodocompareToda classeString. OString.compareTo(String anotherString)retorna umintnegativo se a string atual for lexicograficamente menor que a outra, zero se forem iguais, e umintpositivo se for maior. Isso atende perfeitamente à interface funcionalComparator<String>esperada pelo métodosort.
Fonte: FGV CVM 2024 Analista CVM - TI Sistemas e Desenvolvimento (Perfil 8) (Caderno Tipo 1). Reproduzida para fins de estudo.