完成这项工作的最简洁方法是什么?
class AnObject{
Long attr;
}
List<AnObject> list;
我知道可以使用AnObject的自定义比较器来完成。对于这种情况,是不是有一些现成的东西?
Collections.sort(list, X.attr ) ;
答案 0 :(得分:95)
假设您实际拥有List<AnObject>
,那么您需要的只是
list.sort(Comparator.comparing(a -> a.attr));
如果您通过不使用公共字段而不是使用访问器方法来使代码清理,则它变得更加清晰:
list.sort(Comparator.comparing(AnObject::getAttr));
答案 1 :(得分:9)
作为@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())));
将把空值放在第一位或最后一位。
答案 2 :(得分:2)
JB Nizet的上述无效选项以及Alex的上述答案将是:
list.sort(Comparator.comparing(AnObject::getAttr, Comparator.nullsFirst(Comparator.naturalOrder())));
或
list.sort(Comparator.comparing(AnObject::getAttr, Comparator.nullsLast(Comparator.naturalOrder())));