我有一些lambda表达式如下:
val foo : (Int => Option[String]) = (x: Int) => Some("foo")
val bar : (Int => Option[String]) = (x: Int) => Some("bar")
Seq(foo,bar).flatMap(_ (2))
并按照我的预期进行评估:
res0: Seq[String] = List(foo, bar)
现在我将lambda表达式更改为使它们获取Int并返回玩具Future计算:
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
val foo1 : (Int => Future[Option[String]]) = (x: Int) => Future successful Some("foo")
val bar1: (Int => Future[Option[String]]) = (x: Int) => Future successful Some("bar")
我希望得到与之前相同的结果,即List("foo", "bar")
,但我不知道如何实现它。我想我需要使用Monad变形金刚但不完全确定。
答案 0 :(得分:2)
您可以使用Future.sequence
将结果转换为Future[List]
,然后展平它:
Future.sequence(Seq(foo1,bar1).map(_ (2))).map(_.flatten)
这将返回Future[List[String]]
,然后您可以根据需要处理Future
。