【发布时间】:2015-09-28 19:46:44
【问题描述】:
我有一个元组的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)))
})
【讨论】:
比 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。
【讨论】: