Gei*_*eir 8 java optional java-8
考虑这两个类
class EmailService {
public Optional<String> getEmailAlias(String email);
}
enum Queue {
public static Optional<Queue> fromEmailAlias(String alias);
}
Run Code Online (Sandbox Code Playgroud)
上述方法的实现对于这个问题并不重要,所以为了简单起见,我把它留了下来.
我想做这个:
emailService.getEmailAlias("john@done")
.map(Queue::fromEmailAlias)
.ifPresent(queue -> {
// do something with the queue instance, oh wait it's an Optional<Queue> :(
});
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为queue是类型Optional<queue>(与返回的类型相同Queue::fromEmailAlias),所以我改为:
emailService.getEmailAlias("john@done")
.map(Queue::fromEmailAlias)
.ifPresent(q-> {
q.ifPresent(queue -> {
// do something with the queue instance
}
});
Run Code Online (Sandbox Code Playgroud)
一种丑陋的imho.
改变签名
public static Optional<Queue> fromEmailAlias(String alias);
Run Code Online (Sandbox Code Playgroud)
至
public static Queue fromEmailAlias(String alias);
Run Code Online (Sandbox Code Playgroud)
是一个快速修复,但这也会影响我需要的其他地方的代码Optional<Queue>.
有没有一种很好的方法来解开这个嵌套的Optional?
Mar*_*nik 13
你需要申请flatMap:
emailService.getEmailAlias("john@done")
.flatMap(Queue::fromEmailAlias)
.ifPresent(queue -> {
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |