Comment trier un ArrayList<Long>
en Java par ordre décroissant?
98
Voici un moyen pour votre list
:
list.sort(null);
Collections.reverse(list);
Ou vous pouvez implémenter le vôtre Comparator
pour trier et éliminer l'étape inverse:
list.sort((o1, o2) -> o2.compareTo(o1));
Ou encore plus simplement utiliser Collections.reverseOrder()
puisque vous ne faites qu'inverser:
list.sort(Collections.reverseOrder());
l1 > l2 ? -1 : l1 == l2 ? 0 : 1
ce code est ridicule. Utilisezo1.compareTo(o2)
alors.o2.compareTo(o1)
ici :)list.sort((o1, o2) -> o2.compareTo(o1))
la source
Vous pouvez utiliser le code suivant qui est donné ci-dessous;
ou si vous allez utiliser un comparateur personnalisé, vous pouvez utiliser comme indiqué ci-dessous
Où CustomComparator est une classe de comparaison qui compare l'objet présent dans la liste.
la source
Java 8
bien faire cela en java 8 est tellement amusant et plus facile
Les expressions lambda rockent ici !!!
au cas où vous auriez besoin d'une logique de plus d'une ligne pour comparer a et b, vous pourriez l'écrire comme ceci
la source
Trier normalement et utiliser
Collections.reverse();
la source
Pour les lamdas où votre valeur longue est quelque part dans un objet, je recommande d'utiliser:
ou encore mieux:
la source
Trier, puis inverser.
la source
Une approche plus générale pour implémenter notre propre comparateur comme ci-dessous
la source
En utilisant
Collections.sort()
avec un comparateur qui fournit l'ordre décroissant. Voir Javadoc pour Collections.sort .la source
L'approche suivante trier la liste par ordre décroissant et gère également les « nulles valeurs », juste au cas où si vous avez des valeurs nulles alors Collections.sort () jetteront NullPointerException
la source
Vous pouvez également trier un
ArrayList
avec unTreeSet
au lieu d'uncomparator
. Voici un exemple d'une question que j'avais auparavant pour un tableau d'entiers. J'utilise "nombres" comme nom d'espace réservé pour leArrayList
.la source
TreeSet
ne stocke pas les valeurs en double.Donc, il y a quelque chose que je voudrais soulever qui, à mon avis, est important et que vous devriez considérer. runtime et mémoire. Disons que vous avez une liste et que vous voulez la trier, eh bien, vous pouvez, il existe un tri intégré ou vous pouvez développer la vôtre. Ensuite, vous dites, voulez inverser la liste. Telle est la réponse qui est énumérée ci-dessus.
Si vous créez cette liste, il peut être bon d'utiliser une structure de données différente pour la stocker, puis de la vider dans un tableau.
Les tas font exactement cela. Vous filtrez les données et il gérera tout, puis vous pouvez tout retirer de l'objet et il serait trié.
Une autre option serait de comprendre le fonctionnement des cartes. Souvent, une carte ou un HashMap comme quelque chose que l'on appelle les choses, ont un concept sous-jacent.
Par exemple .... vous alimentez un tas de paires clé-valeur où la clé est la longue, et lorsque vous ajoutez tous les éléments, vous pouvez faire:
.keys
et il vous renverrait une liste triée automatiquement.Cela dépend de la façon dont vous traitez les données avant de savoir comment je pense que vous devriez continuer votre tri et les inversions ultérieures.
la source
La méthode de comparaison du comparateur peut être utilisée pour comparer les objets, puis la méthode
reversed()
peut être appliquée pour inverser l'ordre -la source