我有一个元组的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)))
})
比Till 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
。