1
resposta

sort Lambda

tentei fazer um sort atravez de um lambda

        Collections.sort(aulas, (au1,au2) -> au1.getTitulo().length() - au2.getTitulo().length());

com os seguintes dados:

        Aula a1 = new Aula("Revisitando Array Lists", 21);
        Aula a2 = new Aula("Trabalhando com listas de Objetos", 15);
        Aula a3 = new Aula("Relacionamento listas de Objetos", 15);

        ArrayList<Aula> aulas = new ArrayList<>();
        aulas.add(a1);
        aulas.add(a2);
        aulas.add(a3);

o output saiu dessa forma, ja com a reescrita do toString(): [[ Titulo: Revisitando Array Lists Tempo: 21 ], [ Titulo: Relacionamento listas de Objetos Tempo: 15 ], [ Titulo: Trabalhando com listas de Objetos Tempo: 15 ]]

podemos perceber que o o Revisitando veio primeiro que o Relacionamento.

quando faço implementado a interface Comparable<>, vem certo... o Lambda tem algo de errado?

Qual é a abordagem mais atual? essa Lambda ou usando o comparing :: ?

Desde já... Tks!

1 resposta

Ola Erico.

Em termos de código que ele executa, sendo lambda ou não, seria a mesma execução para o mesmo algoritmo. Em tese não tem diferença entre usar lambda e comparator na classe, sendo que os dois teriam os mesmos codigos de comparação.

Voce poderia mostrar como estaria o comparator que funciona como esperado?

Sobre qual usar, veja que são abordagens diferentes: ao usar lambda, voce tá fazendo a regra de comparação na execução da regra de negócio. Imagine que você tenha 5 locais diferentes que precise desse comparação, o codigo poderia ficar repetido. Agora se a regra de comparação estiver dentro de Aula, você só usaria a comparação nos 5 locais diferentes.