1
resposta

Ordenando em ordem decrescente

Procurei uma forma de imprimir as aulas em ordem decrescente de acordo com o tempo.

encontrei o método Collections.reverseOrder() que funcionou aplicado da forma abaixo:

Classe Aula:

@Override
    public int compareTo(Aula outraAula) {
        return Integer.compare(this.tempo, outraAula.tempo);
    }

Classe TestaListaAula:

Collections.sort(aulas, Collections.reverseOrder());

Não me pareceu a forma mais correta de fazer isso.

Como eu definiria uma ordenação decrescente de acordo com o parâmetro tempo direto na classe Aula?

Obrigada

1 resposta

Olá, Ana, tudo bem? existe uma maneira bem elegante de se fazer isso... Alunos no seu caso é um ArrayList, certo? então teste usar o sort() diretamente na lista, desta forma:

    alunos.sort()

Neste ponto o sort() pode receber dois paramêtros na sua lambda, desta maneira:

alunos.sort((aluno1, aluno2) -> {});

Isso significa que você estará estabelecendo uma comparação entre os seus alunos, agora basta especificar o que será comparado:

alunos.sort((aluno1, aluno2) -> aluno1.getTempo().compareTo(aluno2.getTempo));

Desta maneira a ordem será crescente, pois você está comparando a primeira entrada ordenada com a segunda, por lógica ao inverter a ordem você estará ordenando de maneira decrescente, desta maneira:

alunos.sort((aluno1, aluno2) -> aluno2.getTempo().compareTo(aluno1.getTempo));

Espero ter ajudado.