Scala:在没有任何特定条件的情况下处理Future.Filter.exists的更好方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala:在没有任何特定条件的情况下处理Future.Filter.exists的更好方法相关的知识,希望对你有一定的参考价值。
Scala:我只有在前一次返回Some(x)时才需要执行操作。比使用下面的代码更好的方法是做什么
def tryThis: Future[Option[T]] = {...}
val filteredFuture = tryThis.filter(_.exists(_ => true))
def abc = filteredFuture.map( _ => {...})
答案
最好的方法是在map
上调用Option
,如下所示:
tryThis.map(_.map(_ => {...}))
只有当Future
返回Some(x)
时才会调用该函数。结果是另一个Future[Option[U]]
,其中U
是你的功能的结果。
请注意,如果原始Future(None)
是Option
,这将返回None
,而filter
将生成失败的异常,因此他们不会做同样的事情。
另一答案
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…) }
另一答案
你可以替换:
tryThis.filter(_.exists(_ => true))
有:
tryThis.filter(_.isDefined)
另一答案
import scala.concurrent.ExecutionContext.Implicits.global
def square(a: Int): Future[Option[Int]] = Future.successful(Option(a * a))
def printResult(a: Int): Unit = println(s"Result: $a")
square(2).foreach(_.map(printResult))
编辑:根据@Thilo的建议
以上是关于Scala:在没有任何特定条件的情况下处理Future.Filter.exists的更好方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有滚动行为的情况下转到特定部分/没有滚动行为的 scrollIntoView() 的任何替代方法?