2016-12-28 7 views
2

私は2時間前から検索していますが、私の問題に対する答えは得られません。私は今、私の質問は、私は配列をフラット化する方法[Future [Seq [T]]

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

たぶん誰かが私に助けることができる

乾杯配列のうち、配列を抽出しない方法です、戻るが、配列の配列を持っている唯一の配列を持つようにしたい

更新:

申し訳ありませんが、私の質問は正確にはそうではありません。 私は、Future [Seq [User]]の戻り値を持ち、query.split(マッピングが必要)のため、配列[Future [Seq [User]]]

エラーが 型配列の発現【今後[配列[ユーザー]]] Array[Future[Seq[User]]を平坦化するために期待されるタイプフューチャー[配列[ユーザー]]

+1

'Users.search'は何を返しますか?そして、 'users'変数は何ですか? –

+0

あなたは 'Future [Seq [User]]の代わりに' Seq [Future [Seq [User]]] 'に終わることに問題はありますか? – haffla

+0

人々があなたを助けてくれるようにするには、問題をより慎重に記述する必要があります(もっと一般的には)。 – haffla

答えて

4

に準拠していない、私たちが最初に取得するFuture.sequenceを使用することができますですFuture[Array[Seq[User]]その後、Future[Seq[User]]を得るためにそれを平ら:

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

それは感謝1000回thats – tbere

0

私はが好きではありません私の答えでは、しかし使用の表示に投稿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)) 
関連する問題