我是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
复制相似问题