これらの2つのクラスを検討してください
class EmailService {
public Optional<String> getEmailAlias(String email);
}
enum Queue {
public static Optional<Queue> fromEmailAlias(String alias);
}
上記のメソッドの実装は質問にとって重要ではないので、簡単にするために省略しました。
私はこれをしたい:
emailService.getEmailAlias("john@done")
.map(Queue::fromEmailAlias)
.ifPresent(queue -> {
// do something with the queue instance, oh wait it's an Optional<Queue> :(
});
ただし、queue
はタイプOptional<queue>
(によって返されるのと同じタイプQueue::fromEmailAlias
)であるため、これは機能しません。代わりに、次のようにします。
emailService.getEmailAlias("john@done")
.map(Queue::fromEmailAlias)
.ifPresent(q-> {
q.ifPresent(queue -> {
// do something with the queue instance
}
});
醜い私見の一種。
の署名の変更
public static Optional<Queue> fromEmailAlias(String alias);
に
public static Queue fromEmailAlias(String alias);
簡単な修正ですが、それは必要な他の場所のコードにも影響しますOptional<Queue>
。
このネストされたオプションをアンラップする良い方法はありますか?
あなたは適用する必要がありますflatMap
:
emailService.getEmailAlias("john@done")
.flatMap(Queue::fromEmailAlias)
.ifPresent(queue -> {
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加