Scala:期货和清单

scala: futures and lists

我有这样的方法

def jobs: Future[List[Job]]
def jobTasks(jobId: Int): Future[List[Task]]

对象 JobjobId 字段。

我需要收集包含所有任务的所有工作,这些工作与 List[JobWithTasks]

的工作相匹配
case class JobWithTasks(job: Job, tasks: List[Task])

尝试了Future.traverse,一些猫的理解方法。没有结果。

如果我们有一个 Job 我们只需要调用 jobTasks 然后 map 那个 future 就可以得到一个 JobWithTasks.

如果我们有一个 List of Jobs,我们可以使用 traverse 将前面的过程应用到每个 Job 和 return 单个 Future of List of JobWithTasks.

最后,如果我们有 Future of List of Jobs,我们需要使用 flatMap 应用前面的过程来获得单个 Future of List of JobWithTasks.

因此,代码如下所示:

def jobsWithTaks: Future[List[JobWithTasks]] =
  jobs.flatMap { listOfJobs =>
    Future.traverse(listOfJobs) { job =>
      jobTasks(jobId = job.id).map { listOfTasks =>
        JobWithTasks(job, listOfTasks)
      }
    }
  }

这是一个名为 type tetris 的过程,它对 Scala 等表达性和函数式语言非常有用。