功能序列应用程序

时间:2017-02-16 22:07:24

标签: 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表达式更改为使它们获取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变形金刚但不完全确定。

1 个答案:

答案 0 :(得分:2)

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

Future.sequence(Seq(foo1,bar1).map(_ (2))).map(_.flatten)

这将返回Future[List[String]],然后您可以根据需要处理Future