2016-12-28 56 views
2

即時搜索2小時,並沒有得到任何答案我的問題。我想只有一個序列返回,但有序列的陣列,所以現在我的問題是我如何提取SEQ出數組的我該如何壓扁一個陣列[未來[Seq [T]]]

def searchUsers(query: String): Future[Seq[User]] = { 
    var queryStrings: Array[String] = query.split(" ") 
    var users = ArrayBuffer[User]() 
    queryStrings.map(Users.search(_)) 
} 

也許有人可以幫我

乾杯

更新:

遺憾的是,我的問題是不是準確,它應該是。 我的問題是,我想要返回值作爲未來[序號[用戶]]和因爲query.split(我必須映射它)它是陣列[未來[序號[用戶]]]

該錯誤是數組類型的 表達[未來[序列[用戶]]]不符合預期的未來型[序列[用戶]

+1

'Users.search'返回什麼?什麼是用戶變量? –

+0

你的問題是你最終得到了Seq [Future [Seq [User]]]而不是'Future [Seq [User]]'? – haffla

+0

如果您希望人們幫助您,您必須更仔細地描述您的問題(也許更一般)。 – haffla

回答

4

爲了扁平化Array[Future[Seq[User]],我們可以先用Future.sequence獲得Future[Array[Seq[User]],然後壓平得到Future[Seq[User]]

Future 
.sequence[Seq[User], Seq](queryStrings.map(Users.search)) 
.map(_.flatten) 
+1

多數民衆贊成它感謝1000倍 – tbere

0

我不喜歡x.toList在我的回答中,但張貼顯示Future#traverse的用法:

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

def f[A, B](x: Array[A], f: A => Future[Seq[B]]): Future[Seq[B]] = 
    Future.traverse[A, Seq[B], Seq](x.toList)(f).map(_.flatten) 

scala> f(Array(1,2,3), { x: Int => Future.successful(List(x)) }) 
res2: scala.concurrent.Future[Seq[Int]] = Success(List(1, 2, 3))