Scala:仅当前一个Future返回Some(x)时,我才需要执行操作。有什么比使用下面的代码更好的方法
def tryThis: Future[Option[T]] = {...}
val filteredFuture = tryThis.filter(_.exists(_ => true))
def abc = filteredFuture.map( _ => {...})
答案 0 :(得分:2)
最好的方法是像这样在map
上调用Option
:
tryThis.map(_.map(_ => {...}))
仅当Future
返回Some(x)
时,此函数才调用。结果为另一个Future[Option[U]]
,其中U
是函数的结果。
请注意,如果原始的Future(None)
是Option
,则它将返回None
,而filter
会生成失败的异常,因此它们不会做同样的事情东西。
答案 1 :(得分:2)
def tryThis: Future[Option[T]] = {...}
// Resulting future will be failed if it a None
// and its type will be that of the expression in `x…`
def abc = tryThis collect { case Some(x) => x… }
// Resulting future will be a None if it was a None
// and a Some with the type of the expression in `x…`
def abc = tryThis map { _.map(x => x…) }
答案 2 :(得分:0)
您可以替换:
tryThis.filter(_.exists(_ => true))
具有:
tryThis.filter(_.isDefined)
答案 3 :(得分:0)
let
编辑:根据@Thilo建议