2017-02-16 4 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 и вернуть игрушку Будущие вычисления:

Я хотел бы получить тот же результат, что и раньше, т.е. 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, как вы, кажется нужным.