Подтвердить что ты не робот

Java 8, Сортировка списка объектов по атрибуту без пользовательского компаратора

Каков самый чистый короткий способ сделать это?

 class AnObject{
     Long  attr;
 }

 List<AnObject> list; 

Я знаю, что это можно сделать с помощью пользовательского компаратора для AnObject. Разве нет что-то готовое из коробки для такого случая? вид

 Collections.sort(list, X.attr ) ;
4b9b3361

Ответ 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())));

который поместит нули первым или последним.