2014-11-03 82 views
24

我想借此VAL:如何拉平期貨的一個列表,斯卡拉

val f = List(Future(1), Future(2), Future(3)) 

對其執行一些操作(我的想法變平)

f.flatten 

而得到這樣的結果

scala> f.flatten = List(1,2,3) 

如果扁平方法在這裏不合適,那很好。只要我得到結果。

謝謝!

+0

如果其中一個「未來」發生故障,您希望發生什麼? – 2014-11-03 15:42:28

+0

如果有任何期貨失敗,那麼我希望整個事情都失敗。這是一個家庭作業問題的一部分,所以我不打算讓整個事情爲我解決。但基本上,我仍然必須弄清楚如何確定是否有任何期貨失敗,如果他們確實做到了,我就殺了整個事情。 – mikejones1477 2014-11-03 16:38:32

回答

49

Future.sequence需要List[Future[T]]並返回Future[List[T]]

你可以做

Future.sequence(f) 

然後用maponComplete它來訪問值列表。

+0

這是我得到的輸出: scala.concurrent.Future [List [Int]] = [email protected] 這是預期嗎?它正在將List [Future [T]]轉變爲未來[List [T]]。 但我期待一些沿線: scala.concurrent.Future [List [Int]] = Future(List(1,2,3)) 謝謝! – mikejones1477 2014-11-03 15:45:32

+0

是的,這是一個'未來'。現在你可以處理它(地圖,使用onComplete或任何你想要的)。 '未來'裏面的結果將成爲你成功的列表 – 2014-11-03 15:47:34

+1

'未來'通常不會打印它裏面的內容(這意味着阻塞)。如果你執行'Future(1)',你會看到'scala.concurrent.impl.Promise $ DefaultPromise @ 78393fdb'。對於測試,你可以使用'Await.result(f,2.seconds)'等東西。 – lmm 2014-11-03 15:53:48