Scala:在没有任何特定条件的情况下处理Future.Filter.exists的更好方法

时间:2019-02-13 09:29:42

标签: scala collections

Scala:仅当前一个Future返回Some(x)时,我才需要执行操作。有什么比使用下面的代码更好的方法

def tryThis: Future[Option[T]] = {...}

val filteredFuture = tryThis.filter(_.exists(_ => true))

def abc = filteredFuture.map( _ => {...})

4 个答案:

答案 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建议