これを行う最もクリーンな短い方法は何ですか?
class AnObject{
Long attr;
}
List<AnObject> list;
AnObjectのカスタムコンパレータを使用して実行できることを知っています。そのような場合にすぐに使えるものはありませんか?やや
Collections.sort(list, X.attr ) ;
実際にList<AnObject>
を持っていると仮定すると、必要なのは
list.sort(Comparator.comparing(a -> a.attr));
パブリックフィールドを使用せずにアクセサメソッドを使用してコードをクリーンにすると、さらにクリーンになります。
list.sort(Comparator.comparing(AnObject::getAttr));
@JB Nizetの答えを補完するものとして、attrがNULL可能であれば、
list.sort(Comparator.comparing(AnObject::getAttr));
nPEをスローする場合があります。
Null値も並べ替える場合は、検討できます。
list.sort(Comparator.comparing(a -> a.attr, Comparator.nullsFirst(Comparator.naturalOrder())));
または
list.sort(Comparator.comparing(a -> a.attr, Comparator.nullsLast(Comparator.naturalOrder())));
nullを最初または最後に配置します。
上記のJB NizetとAlexの答えに対するヌルセーフオプションは、次のようにすることです。
list.sort(Comparator.comparing(AnObject::getAttr, Comparator.nullsFirst(Comparator.naturalOrder())));
または
list.sort(Comparator.comparing(AnObject::getAttr, Comparator.nullsLast(Comparator.naturalOrder())));