Como classificar um ArrayList<Long>
em Java em ordem decrescente?
98
Esta é uma maneira de list
:
list.sort(null);
Collections.reverse(list);
Ou você pode implementar o seu próprio Comparator
para classificar e eliminar a etapa inversa:
list.sort((o1, o2) -> o2.compareTo(o1));
Ou ainda mais simplesmente use, Collections.reverseOrder()
já que você está apenas revertendo:
list.sort(Collections.reverseOrder());
l1 > l2 ? -1 : l1 == l2 ? 0 : 1
este código é ridículo. Useo1.compareTo(o2)
então.o2.compareTo(o1)
aqui :)list.sort((o1, o2) -> o2.compareTo(o1))
fonte
Você pode usar o código a seguir, fornecido a seguir;
ou se você for usar um comparador personalizado, você pode usar como é fornecido abaixo
Onde CustomComparator é uma classe comparadora que compara o objeto que está presente na lista.
fonte
Java 8
bem fazer isso em java 8 é muito divertido e fácil
Expressões lambda arrasam aqui !!!
no caso de você precisava de uma lógica mais de uma linha para comparar um e b você poderia escrevê-lo como este
fonte
Classifique normalmente e use
Collections.reverse();
fonte
Para lamdas em que o valor longo está em algum lugar de um objeto, recomendo usar:
ou ainda melhor:
fonte
Classifique e depois inverta.
fonte
Uma abordagem mais geral para implementar nosso próprio Comparador conforme abaixo
fonte
Usando
Collections.sort()
com um comparador que fornece a ordem decrescente. Consulte Javadoc para Collections.sort .fonte
A abordagem a seguir classificará a lista em ordem decrescente e também lida com os valores ' nulos ', apenas no caso de você ter algum valor nulo, Collections.sort () lançará NullPointerException
fonte
Você também pode classificar um
ArrayList
com um emTreeSet
vez de umcomparator
. Aqui está um exemplo de uma pergunta que tive antes sobre uma matriz de inteiros. Estou usando "números" como um nome de espaço reservado para oArrayList
.fonte
TreeSet
não armazena valores duplicados.Portanto, há algo que gostaria de mencionar que considero importante e que você deve considerar. tempo de execução e memória. Digamos que você tenha uma lista e queira classificá-la, bem, você pode; existe uma classificação incorporada ou você poderia desenvolver a sua própria. Então você diz, quer reverter a lista. Essa é a resposta listada acima.
No entanto, se você estiver criando essa lista, pode ser bom usar uma estrutura de dados diferente para armazená-la e depois apenas despejá-la em um array.
Montes fazem exatamente isso. Você filtra os dados e ele tratará de tudo, então você pode retirar tudo do objeto e seria classificado.
Outra opção seria entender como funcionam os mapas. Muitas vezes, um mapa ou HashMap, como as coisas são chamadas, tem um conceito subjacente por trás dele.
Por exemplo ... você alimenta um monte de pares de valores-chave onde a chave é longa, e quando você adiciona todos os elementos, você pode fazer:
.keys
e ele retornaria para você uma lista classificada automaticamente.Depende de como você processa os dados antes de como eu acho que você deve continuar com sua classificação e reversões subsequentes
fonte
O método de comparação do comparador pode ser usado para comparar os objetos e, em seguida, o método
reversed()
pode ser aplicado para inverter a ordem -fonte