Scala 函数应用程序顺序

Scala 函数应用程序顺序,scala,Scala,我有一些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表达式,使其

我有一些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表达式,使其取整数并返回未来的计算:

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 Transformers,但不完全确定。

您可以使用
Future.sequence
将结果转换为
Future[List]
,然后将其展平:

Future.sequence(Seq(foo1,bar1).map(_ (2))).map(_.flatten)
这将返回一个
Future[List[String]]
,然后您可以根据需要处理
Future