Limitações da inferência no lambda

1 Problemas de inferência com lambdas encadeados Method reference funciona sem problemas: usuarios.sort(Comparator.comparingInt(Usuario::getPontos) .thenComparing(Usuario::getNome)); Lambda equivalente pode não compilar: usuarios.sort(Comparator.comparingInt(u -> u.getPontos()) .thenComparing(u -> u.getNome())); // Não compila 2 Soluções para compilar lambdas encadeados Explicitando o tipo no lambda: usuarios.sort(Comparator.comparingInt((Usuario u) -> u.getPontos()) .thenComparing(u -> u.getNome())); Quebrando o encadeamento: Comparator comparator = Comparator.comparing(u -> u.getPontos()); usuarios.sort(comparator.thenComparing(u -> u.getNome())); Forçando tipo genérico do método: usuarios.sort(Comparator.comparingInt(u -> u.getPontos()) .thenComparing(u -> u.getNome())); 3 Preferência por method reference Method reference (Usuario::getPontos) facilita a inferência dos tipos. Usado principalmente em interfaces fluentes como Comparator.reversed(). Exemplo: método reversed() usuarios.sort(Comparator.comparingInt(Usuario::getPontos).reversed()); Lambda precisa de tipo explícito: usuarios.sort(Comparator.comparingInt((Usuario u) -> u.getPontos()).reversed()); Exemplo: ExemploInferenciaEncadeamento.java

Apr 30, 2025 - 00:04
 0
Limitações da inferência no lambda

1 Problemas de inferência com lambdas encadeados
Method reference funciona sem problemas:

usuarios.sort(Comparator.comparingInt(Usuario::getPontos)
.thenComparing(Usuario::getNome));

Lambda equivalente pode não compilar:

usuarios.sort(Comparator.comparingInt(u -> u.getPontos())
.thenComparing(u -> u.getNome())); // Não compila

2 Soluções para compilar lambdas encadeados

Explicitando o tipo no lambda:

usuarios.sort(Comparator.comparingInt((Usuario u) -> u.getPontos())
.thenComparing(u -> u.getNome()));

Quebrando o encadeamento:

Comparator comparator = Comparator.comparing(u -> u.getPontos());
usuarios.sort(comparator.thenComparing(u -> u.getNome()));

Forçando tipo genérico do método:

usuarios.sort(Comparator.comparingInt(u -> u.getPontos())
.thenComparing(u -> u.getNome()));

3 Preferência por method reference
Method reference (Usuario::getPontos) facilita a inferência dos tipos.

Usado principalmente em interfaces fluentes como Comparator.reversed().

Exemplo: método reversed()

usuarios.sort(Comparator.comparingInt(Usuario::getPontos).reversed());

Lambda precisa de tipo explícito:

usuarios.sort(Comparator.comparingInt((Usuario u) -> u.getPontos()).reversed());

Exemplo: ExemploInferenciaEncadeamento.java