Java 8, Сортировка списка объектов по атрибуту без пользовательского компаратора
Каков самый чистый короткий способ сделать это?
class AnObject{
Long attr;
}
List<AnObject> list;
Я знаю, что это можно сделать с помощью пользовательского компаратора для AnObject. Разве нет что-то готовое из коробки для такого случая? вид
Collections.sort(list, X.attr ) ;
Ответы
Ответ 1
Предполагая, что у вас есть List<AnObject>
, все, что вам нужно, это
list.sort(Comparator.comparing(a -> a.attr));
Если вы сделаете код чистым, не используя общедоступные поля, а также методы доступа, он станет еще чище:
list.sort(Comparator.comparing(AnObject::getAttr));
Ответ 2
В качестве дополнения к ответу @JB Nizet, если ваш attr является нулевым,
list.sort(Comparator.comparing(AnObject::getAttr));
может выбросить NPE.
Если вы также хотите отсортировать нулевые значения, вы можете рассмотреть
list.sort(Comparator.comparing(a -> a.attr, Comparator.nullsFirst(Comparator.naturalOrder())));
или
list.sort(Comparator.comparing(a -> a.attr, Comparator.nullsLast(Comparator.naturalOrder())));
который поместит нули первым или последним.