2017-02-16 37 views
1

次のように私はいくつかのラムダ式を持つ:シーケンス

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) 

は今、私は彼らが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トランスフォーマーを使う必要があるとは思っていますが、完全にはわかりません。あなたがFuture[List]に結果を変換するFuture.sequenceを使用し、それを平らにすることができます

+0

[使用するMonadトランスフォーマは?](http://stackoverflow.com/questions/42290243/which-monad-transformer-to-use)の可能な複製 –

答えて

2

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

これはFuture[List[String]]を返しますあなたはフィットに見えるように、あなたがしてFutureを扱うことができます。