2014-09-05 4 views
2

У меня есть Future[Future[(String,String)]], и я хочу преобразовать его в Future[(String,String)], используя для понимания.Преобразование будущего [Future [(String, String)]] в Future [(String, String)] в Scala для понимания

+1

Возможный дубликат [Как я могу сгладить это будущее \ [T \] структура?] (Http://stackoverflow.com/questions/15835222/how-can-i-flatten-this-futuret-structure) –

ответ

5

Не обязательно с пониманием, простой подход предполагает использование flatMap по сравнению с identity.

Рассмотрим, например

import scala.concurrent.Future 
import scala.concurrent.ExecutionContext.Implicits.global 

def f: Future[Future[(String,String)]] = Future { Future {("a","aa")} } 

Тогда

f.flatMap(identity) 
res: scala.concurrent.Future[(String, String)] = [email protected] 
1
import scala.concurrent.Future 
import scala.concurrent.ExecutionContext.Implicits.global 

val futureOfFutures: Future[Future[(String,String)]] = Future { Future {("a","aa")} } 
for(futureOfFuture <- futureOfFutures; futureResult <- futureOfFuture) yield futureResult 

Только в случае, если вы хотели использовать для понимания. Так вы это делаете.