我是Scala的新手,我想知道如何将Future[Option[A]]转换为Future[A]
发布于 2021-01-15 14:16:44
由于Option[A]可能为None,因此如果想将其转换为A,最直接的方法是使用.getOrElse(value)方法,其中需要提供A类型的默认值,以便在选项本身没有默认值时使用。
val opt1 = Some(3)
opt1.getOrElse(5) //returns 3
val opt2 = None
opt2.getOrElse(5) //returns 5然后,如果您有一个Future[Option[A]],您希望在将来的.map方法中执行此操作:
val futureOpt: Future[Option[Int]] = Future{ Some(3) }
val future: Future[Int] = futureOpt.map{opt => opt.getOrElse(5)}发布于 2021-01-15 17:30:53
Option[A]可以是Some[A]或None。Some[A]的例子很简单,你可以从中得到A。但是对于None的情况,您可以提供一个默认值,也可以将其视为失败。
使用缺省值,
val aDefault: A = ...
val aFuture1 = aOptionFuture.map({
case Some(a) => a
case None => aDefault
})
// or
val aFuture2 = aOptionFuture.map(_.getOrElse(aDefault))考虑一下失败,
val aFuture3 = aOptionFuture.flatMap({
case Some(a) => Future.successful(a)
case None=> Future.failed(new Exception("computed a None"))
})发布于 2021-01-15 20:04:54
val optFuture: Future[Option[Int]] = Future(Some(3))
optFuture.map {
case Some(v) => v
case None => throw new RuntimeException("<some-exception>")
}或
optFuture.map(_.getOrElse(throw new RuntimeException("<some-exception>")))https://stackoverflow.com/questions/65731237
复制相似问题