【Java】Listをmapで変換する際にnull値をデフォルト値で変換する

やりたいこと

Java11においてnull値を含むオブジェクトのListをstreamのmapを使って別のListへ変換する際に、null値をデフォルト値へ変換します。

動作検証はJava11で行っています。

準備

例として書籍の著者情報を表す以下のAuthorクラスを考えます。


public class Author {
    private int id;
    private String authorName;
    private LocalDateTime authorBirthday;

    // setter, getterは省略
}

このAuthorクラスのインスタンスのListを作成します。

このauthorList1に含まれるAuthorインスタンスのauthorNameを大文字に変換したListを作成する処理を考えます。authorNameがnullの場合は空文字となるようにします。

var authorList1 = List.of(
                new Author(1, "hoge", LocalDateTime.now()),
                new Author(2, null, LocalDateTime.now())
        );

Optional.ofNullableを使った方法

以下のようにmapの中でOptionalでくるみ、orElseメソッドでnull値の場合の値を指定しています。

// importは省略

public class ListTest {

    @Test
    public void test1() {

        var authorList1 = List.of(
                new Author(1, "hoge", LocalDateTime.now()),
                new Author(2, null, LocalDateTime.now())
        );

        var authorList2 = authorList1
                .stream()
                .map(i -> Optional.ofNullable(i.getAuthorName()).orElse("").toUpperCase())
                .collect(Collectors.toList());

        assertThat(authorList2.get(0)).isEqualTo("HOGE");
        assertThat(authorList2.get(1)).isEqualTo("");
    }
}