3
に対処する方法のは、ラムダなしの例を見てみましょう:Javaの8オプションあまりにも多くのorElses
Credentials credentials = CredentialService.get(id);
if (credentials != null && credentials.isActive()) {
User user = UserService.get(credentials.getUserId());
if (user != null)
return Status.ok(user);
}
return Status.bad();
あなたが見ることができるように、Status.ok()
ユーザーがnull
ない場合にのみ返されます。それ以外の場合はStatus.bad()
が返されます。今ラムダで(サービスのメソッド今Optional<T>
を返す):
return CredentialService.get(id)
.filter(Credentials::isActive)
.map(credentials -> UserService.get(credentials.getUserId())
.map(Status::ok)
.orElse(Status.bad())
).orElse(Status.bad());
今私は(実際のコードでは、およそ4-5)Status.bad()
2回を返すことがあります。それは一度Status.bad()
を返す方法ですか?
。しかし、最後の '.orElse(Status.bad())'を返すだけでよいかもしれません。おそらくそれについて考えることができます。 – smsnheck
@NicolasFilotto、 'Optional'、 'filter'が存在します。 @smsnheck、そうです、それは残りの 'orElse'に' Optional'だけ依存します。これは '。orElse(Optional.empty()).Else(null)'で動作します。混乱させない方法ですか? –
Feeco
デザインがオフになっているため、オプションを使用するかどうかに関係なく、コードがひどくなる可能性があります。 Java 8の機能コンポーネントは、まったく別のプログラミング方法であり、魔法の妖精のダストではありません。 – Kayaman