【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("");
}
}