java 8, trier la liste des objets par attribut sans comparateur personnalisé
Quel est le moyen le plus court de faire cela ?
class AnObject{
Long attr;
}
List<AnObject> list;
Je sais que cela peut être fait avec un comparateur personnalisé pour AnObject. N'y a-t-il pas quelque chose de prêt pour un tel cas ? type de
Collections.sort(list, X.attr ) ;
24
demandé sur
JB Nizet
2015-11-03 00:15:44
3 réponses
En supposant que vous avez réellement un List<AnObject>
, Tout ce dont vous avez besoin est
list.sort(Comparator.comparing(a -> a.attr));
Si vous vous faites nettoyer le code en n'utilisant pas de champs publics, mais des méthodes d'accesseur, cela devient encore plus propre:
list.sort(Comparator.comparing(AnObject::getAttr));
69
répondu
JB Nizet
2015-11-02 21:27:13
En complément de la réponse de @JB Nizet, si votre attr est nullable,
list.sort(Comparator.comparing(AnObject::getAttr));
Peut lancer un NPE.
Si vous souhaitez également trier les valeurs nulles, vous pouvez considérer
list.sort(Comparator.comparing(a -> a.attr, Comparator.nullsFirst(Comparator.naturalOrder())));
Ou
list.sort(Comparator.comparing(a -> a.attr, Comparator.nullsLast(Comparator.naturalOrder())));
Qui mettra nulls en premier ou en dernier.
3
répondu
Alex
2017-11-30 03:42:48
Une option null-safe pour la réponse de JB Nizet et Alex ci-dessus serait de faire ce qui suit:
list.sort(Comparator.comparing(AnObject::getAttr, Comparator.nullsFirst(Comparator.naturalOrder())));
Ou
list.sort(Comparator.comparing(AnObject::getAttr, Comparator.nullsLast(Comparator.naturalOrder())));
1
répondu
Warren Crasta
2018-03-06 03:07:46