前回までの解説でまだ紹介していないStreamインタフェースのメソッドは、いずれも戻り値の型がOptionalクラスという共通点があります。
Optionalクラスは、Java SE 8で導入された新しい概念を表すクラスです。そこで、今回はストリームのメソッドを紹介する前に、このOptionalクラスについて紹介します。
Optionalクラス
Javaでコードを書いていると、どうしても避けて通れないのがnullチェックです。
たとえば、リスト1のようにメソッドの戻り値のnullチェックを行うなど、頻繁に書かなくてはならないですし、目にすることも少なくありません。
リスト1 典型的なnullチェック
Bar bar = foo();
if (bar != null) {
// 正常な場合の処理
} else {
// nullの場合の処理
}
もちろん、nullチェックは防御的プログラミングのテクニックとしてよく知られたものですし、ソフトウェアのロバスト性を高めるためにも必要です。
しかし、nullチェックは本来行いたい処理ではないため、コードの可読性を低下させてしまうことも事実です。
なるべくシンプルにnullチェックに代わる方法ということで、Java SE 8で導入されたのがjava.util.Optionalクラスです。
Optionalクラスの概念はJava特有というわけではありません。ScalaのOptionクラスやHaskellのMaybe型などの概念をJavaに導入したのがOptionalクラスということができます。
Optionalクラスは値を一つだけ保持できるイミュタブルのコンテナということができます。値を保持している場合もありますし、保持していない場合もあります。値を保持していない場合が、今までの手法のnullに相当すると考えられます。