将一组未来列表展平为一个未来列表

时间:2017-11-22 22:04:15

标签: scala

我试图致电persistenceService.find()返回传递给我的方法Future[List[Scan]]的{​​{1}} foreach电子邮件,该电子邮件应返回findByEmails每次调用的Future[List[Scan]] persistenceService.find() 1}}

目前,我有这个:

def findByEmails(emails: Set[String]): Future[List[Scan]] = {
    val results: Set[Future[List[Scan]]] = emails.map(email => persistenceService.find("report.commitsStats.contributors." + email -> BSONDocument("$exists" -> true)))
}

我无法弄清楚如何合并Future[List[Scan]]设置中的每个results,以便我的方法返回一个Future[List[Scan]]

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你可以使用Future.sequence来组合一个期货列表,然后在列表上展平应该就足够了,代码看起来可能类似于未测试的代码:

def f(str: String): Future[List[Scan]] = ???

def g(emails: List[String]): Future[List[Scan] = {
  val futures: List[Future[list[Scan]]] = emails.map(f)
  val futureListList: Future[List[List[Scan]] = Future.sequence(futures)
  futureListList.map(_.flatten)
}