【发布时间】:2021-01-08 09:45:06
【问题描述】:
我必须在异步链中处理 Maybe。事实上,我想通过异步邮件客户端(vertx rxjava2 邮件客户端)发送电子邮件
邮件可能有一个附件,也可能没有。
于是我写了一个方法:
private fun getAttachment() : Maybe<MailAttachment>
使用此方法的代码如下所示:
private fun buildMail() : Single<MailMessage> {
return getAttachment()
.switchIfEmpty(Single.just(MailMessage()))
.map { attachment ->
val mail = MailMessage()
.setFrom("...")
...
if (attachment.name != null) {
mail.setAttachment(attachment)
}
}
}
如您所见,当可能为空时,我切换到邮件消息的空新实例,但我真的不喜欢这种创建空元素并在地图中测试元素是否“填充”的方式。
我认为必须有更好的方法来处理这种逻辑?!
可以将附件放在一个列表中并返回一个 Single,然后在地图中测试列表是否为空,但在我看来这并不是一个更好的方法,因为这看起来可能会有更多然后是一个附件。
【问题讨论】:
-
switchIfEmpty 应该是空的
MailAttachment()?