Streams 初級

1回の呼び出しでOptionalの存在する場合と空の場合の両方を処理する。

✕ Java 8
Optional<User> user = findUser(id);
if (user.isPresent()) {
    greet(user.get());
} else {
    handleMissing();
}
✓ Java 9+
findUser(id).ifPresentOrElse(
    this::greet,
    this::handleMissing
);
このコードに問題がありますか? お知らせください。
📏

単一の式

1回のメソッド呼び出しで両方のケースを処理します。

🚫

get()なし

危険なisPresent() + get()パターンを排除します。

🔗

流暢

findUser()や任意のOptionalを返すメソッドの後に自然に連鎖します。

旧来のアプローチ
Optionalに対するif/else
モダンなアプローチ
ifPresentOrElse()
JDKバージョン
9
難易度
初級
Optional.ifPresentOrElse()
利用可能

JDK 9(2017年9月)以降、広く利用可能

ifPresentOrElse()は存在する場合のConsumerと空の場合のRunnableを受け取ります。isPresent/getのアンチパターンを回避します。

共有 𝕏 🦋 in