Scala:迭代包含列表的元组列表的Future。需要元组的Future的最终结果

时间:2018-04-16 05:39:09

标签: scala fold

我有一个val假设

val a: Future[List[(List[Case_Class], List[Case_Class])]] = //some method call

在我的元组中,有两个列表,比如说

listA = List[Case_Class] and listB = List[Case_Class]. 

两个列表一次都有两个元素。我需要的是将一些逻辑(例如:fold)应用到我的val'a'以实现

Future[(List(Case_Class), List(Case_Class))]

我必须应用的逻辑是什么?

2 个答案:

答案 0 :(得分:1)

这样的东西
a.map(_.unzip match { case (x, y) => (x.flatten, y.flatten) })

答案 1 :(得分:1)

请原谅下面示例中的不合理数量的括号,但这似乎有效:

case class Thing()

val a: Future[List[(List[Thing], List[Thing])]] = {
  Future.successful(List((List(Thing()), List(Thing()))))
}

val b: Future[(List[Thing], List[Thing])] = {
  a.map(x => (x.unzip._1.flatten, x.unzip._2.flatten))
}

Await.ready(b, Duration.Inf)
// scala.concurrent.Future[(List[Thing], List[Thing])] =
// Future(Success((List(Thing()),List(Thing()))))

有关unzip here的更多信息。