Я пытаюсь вызвать persistenceService.find(), возвращая Future[List[Scan]] каждое электронное письмо, переданное моему методу findByEmails, которое должно возвращать объединенные Future[List[Scan]] всех вызовов persistenceService.find()

Итак, сейчас у меня есть это:

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]].

Любые мысли?

0
Jeep87c 23 Ноя 2017 в 01:04

1 ответ

Лучший ответ

Вы можете использовать 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)
}
2
AlexITC 22 Ноя 2017 в 22:12