JavaのList.sort()でComparator.comparing()に渡すプロパティがnullの時のNullPointerExceptionを回避する方法

こんにちは、さるまりんです。

タイトルにもあるように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()を呼び出して、namenullのオブジェクトがあると、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ができない今回のようなケースでエラー回避できるこのようなメソッドが用意されていると助かりますね。

読んでくれてありがとうございました。

それではまた!