2017-02-16 67 views
1

我有一些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和退回玩具未来计算:

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

+0

可能重复[使用哪个Monad Transformer?](http://stackoverflow.com/questions/42290243/which-monad-transformer-to-use) –

回答

2

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

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

这将返回一个Future[List[String]],那么你就可以处理Future你似乎契合。