2
我有一個元組,看起來像這樣的Seq
:斯卡拉轉化序列與未來
Seq[(Future[Iterable[Type1]], Future[Iterator[Type2]])]
我想變成下面這樣的:
Future[Seq([Iterable[Type1], [Iterable[Type2])]
這甚至可能嗎?
我有一個元組,看起來像這樣的Seq
:斯卡拉轉化序列與未來
Seq[(Future[Iterable[Type1]], Future[Iterator[Type2]])]
我想變成下面這樣的:
Future[Seq([Iterable[Type1], [Iterable[Type2])]
這甚至可能嗎?
這應該做的伎倆
val a: Seq[(Future[Iterable[Type1]], Future[Iterable[Type2]])] = ...
val b: Future[Seq[(Iterable[Type1], Iterable[Type2])]] = Future.sequence(a.map{
case (l, r) => l.flatMap(vl => r.map(vr => (vl, vr)))
})
比截至Rohrmann的回答簡單一些。沒有測試,但應該工作。
val seq: Seq[(Future[Iterable[Type1]], Future[Iterable[Type2]])] = ...
val seq2 = Future.traverse(seq) { case (f1, f2) => f1.zip(f2) }
或者
val seq1 = seq.map { case (f1, f2) => f1.zip(f2) }
// Seq[Future[(Iterable[Type1], Iterable[Type2])]]
val seq2 = Future.sequence(seq1)
// Future[Seq([Iterable[Type1], [Iterable[Type2])]
如果你確實有Iterator[Type2]
,如問題,使用f2.map(_.toIterable)
而不只是f2
。
遍歷更好,因爲它不會創建中間集合。好的ans。 – curious