我有一个Seq
的元组,如下所示:
Seq[(Future[Iterable[Type1]], Future[Iterator[Type2]])]
我想将其转换为以下内容:
Future[Seq([Iterable[Type1], [Iterable[Type2])]
这甚至可能吗?
答案 0 :(得分:5)
这应该可以解决问题
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)))
})
答案 1 :(得分:4)
比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
。