将Scala选项[Future [T]]转换为Future [Option [T]] [英] Scala Option[Future[T]] to Future[Option[T]]
本文介绍了将Scala选项[Future [T]]转换为Future [Option [T]]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在Scala中将Option[Future[T]]
转换为Future[Option[T]]
?
How can I convert Option[Future[T]]
to Future[Option[T]]
in scala?
我想在以下地方使用它:
I want to use it in:
val customerAddresses = for {
a <- addressDAO.insert(ca.address) // Future[Address]
ia <- ca.invoiceAddress.map(addressDAO.insert) // Option[Future[Address]]
} yield (a, ia) // Invalid value have to be two futures
此处签名插入方法
def insert(address: Address): Future[Address]
ca
是一个CustomerData
ca
is a CustomerData
case class CustomerData(address: Address, invoiceAddress: Option[Address])
推荐答案
import scala.concurrent.Future
import scala.concurrent.ExecutionContext
def f[A](x: Option[Future[A]])(implicit ec: ExecutionContext): Future[Option[A]] =
x match {
case Some(f) => f.map(Some(_))
case None => Future.successful(None)
}
示例:
scala> f[Int](Some(Future.successful(42)))
res3: scala.concurrent.Future[Option[Int]] = Success(Some(42))
scala> f[Int](None)
res4: scala.concurrent.Future[Option[Int]] = scala.concurrent.impl.Promise$KeptPromise@c88a337
这篇关于将Scala选项[Future [T]]转换为Future [Option [T]]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文