Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre Collections.sort com Lambda

Pessoal, como eu estou praticando o uso de Lambdas, eu decidi implementar também, esta sintaxe:

Collections.sort(aulas, (tempo1, tempo2) -> Integer.compare(tempo1.getTempo(), tempo2.getTempo()));
System.out.println("Sort com Lambda e Comparator (tempo de aula): " + aulas);

Funcionou perfeitamente, mas a dúvida é: Como que o Java conseguiu inferir que os objetos "tempo1" e "tempo2" são do tipo Aula? O compilador busca essa informação através do tipo de lista que é passado no primeiro parâmetro? É isso mesmo?

E, se fosse: aulas.sort((tempo1, tempo2) -> Integer.compare(tempo1.getTempo(), tempo2.getTempo()) Seria basicamente a mesma coisa: Pelo fato do objeto "aulas" ser uma lista de "Aula", o compilador sabe através do Lambda e pela Interface Funcional" Comparator" que tempo1 e tempo2 são objetos da classe Aula.

Essas afirmações são corretas ou eu estou me confundindo? Alguém pode me ajudar? Obrigado!

1 resposta
solução!

Oi Arthur

O que você disse está correto.

Se você olhar a implementação do método sort da classe Collections fica mais fácil de entender:

public static <T> void sort(List<T> list, Comparator<? super T> c) {
        list.sort(c);
    }

Essa assinatura espera receber uma lista do tipo T como primeiro argumento. O próximo argumento tem que ser um Comparator em que o tipo desse Comparator precisa implementar a si mesmo ou a superclasse de T. Basicamente com base no tipo do primeiro argumento é definido o tipo usuado no comparator.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software