2017-09-02 110 views
0

我被困在試圖拼合Seq[Seq[]]並返回結果。因此,我有是這樣的:Scala拼合一個Seq [Future [Seq []]]

def getListsByLC(lcId: Int): Action[AnyContent] = Action.async { 
    listRepo.getListsByLC(lcId).flatMap { lists => 
     val items: Seq[Future[Seq[Item]]] = lists.map { list => 
     itemRepo.getItemsByList(list.id) 
     } 
     Future.sequence(items).map { result => 
     Ok(Json.obj("lists" -> lists, "items" -> result)) 
     } 
    } 
    } 

結果是明顯的arrays enter image description here

array現在我想做的事就是flattenFuture.sequence爲了只已包含所有項目一個陣列。這,旁邊我發現瀏覽網頁類似的版本,是我的嘗試:

def getListsByLC(lcId: Int): Action[AnyContent] = Action.async { 
    listRepo.getListsByLC(lcId).flatMap { lists => 
     val items: Seq[Future[Seq[Item]]] = lists.map { list => 
     itemRepo.getItemsByList(list.id) 
     } 
     Future.sequence(items).map(._flatten) { result => 
     Ok(Json.obj("lists" -> lists, "items" -> result)) 
     } 
    } 
    } 

在這裏,我得到這個編譯錯誤: enter image description here 對不起,我截圖的質量。有任何想法嗎?提前致謝!

+0

鑑於你的截圖它看起來像你的例子不能編譯。什麼產生了你發佈的輸出? – pedromss

+0

我的第一個代碼示例生成了輸出 – Nocebo

+0

然後你應該發佈生成輸出的截圖。不是沒有編譯的東西。 – pedromss

回答

1

你需要調用_.flatten而不是._flatten和你壓扁序列後失蹤的額外.map電話:

Future.sequence(items).map(_.flatten).map { result => 
    Ok(Json.obj("lists" -> lists, "items" -> result)) 
} 
+0

這正是我所嘗試的,但它對第二個'map' :'無法解析符號映射圖' – Nocebo

+0

@Nocebo'flatten'調用有一個額外的錯誤。 –

+0

謝謝你,現在它編譯。對不起,這樣一個愚蠢的錯誤 – Nocebo