2014-10-29 22 views
0

我有兩個期貨。 一個未來(idsFuture)持有計算以獲取id列表。類型的idsFuture的是Future[List[Int]]在另一個未來使用價值過濾期貨

另一個未來(dataFuture)持有的A陣列,其中A被定義爲case class A(id: Int, data: String)dataFuture的類型是未來[數組[A]]

我想篩選dataFuture使用idsFuture中存在的ID。

對於示例 -

case class A(id: Int, data: String) 
val dataFuture = Future(Array(A(1,"a"), A(2,"b"), A(3,"c"))) 
val idsFuture = Future(List(1,2)) 

我應該得到另一具有未來陣列((A(1, 「A」),A(2, 「B」))

我目前做

idsFuture.flatMap{ 
    ids => dataFuture.map(datas => datas.filter(data => ids.contains(data.id)))} 

有沒有更好的解決辦法?

+0

更好的是什麼意思?您是否認識到您得到的解決方案存在問題? – 2014-10-29 08:02:38

回答

3

你可以使用for-comprehension這裏,而不是flatMap + map這樣的:

for { 
    ds <- dataFuture 
    idsList <- idsFuture 
    ids = idsList.toSet 
} yield ds filter { d => ids(d.id) } 

注意applySet更快然後containsList

相關問題