java有没有一种优雅的方法可以打开一个包裹在两个嵌套选项中的对象?
考虑这两个类
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>
的地方的代码
有没有一个很好的方法来打开这个嵌套的可选文件
# 1 楼答案
您需要应用
flatMap
: