こんにちは、さるまりんです。
タイトルにもあるように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
ができない今回のようなケースでエラー回避できるこのようなメソッドが用意されていると助かりますね。
読んでくれてありがとうございました。
それではまた!