こんにちは、さるまりんです。
タイトルにもあるようにJavaのList.sort()メソッドを使うときにCamparator.comparing()に渡すプロパティがnullの時にNullPointerexceptionが発生してしまいます。
こんなクラスがあります。
class SomeClass {
private String name;
public SomeClass(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
以下のようにList.sort()を呼び出して、nameがnullのオブジェクトがあると、NullPointerExceptionが発生します。
List<SomeClass> list = Arrays.asList(
new SomeClass("Salu"),
new SomeClass(null),
new SomeClass("Marine")
);
// これがNullPointerException
list.sort(Comparator.comparing(SomeClass::getName));
これで例外にならないようにするには以下のようにします。
// nullを後にソート
list.sort(Comparator.comparing(SomeClass::getName, Comparator.nullsLast(Comparator.naturalOrder())));
nullsLast()を使うととnullが最後に、nullsFirst()を使うとnullが最初にソートされます。
Comparator.nullsFirst()とComparator.nullsLast()は、nullが発生した際の順序を制御し、null以外の値についてはComparator.naturalOrder()、自然な順序で比較を行います。
NullPointerExceptionが発生しないようにnullチェックするのは大切なことです。
name != nullができない今回のようなケースでエラー回避できるこのようなメソッドが用意されていると助かりますね。
読んでくれてありがとうございました。
それではまた!