在另一个未来使用价值过滤期货

时间:2014-10-29 07:37:09

标签: scala future

我有两个期货。 一个未来(idsFuture)保存计算以获取ID列表。 idsFuture的类型为Future[List[Int]]

另一个未来(dataFuture)包含一个A数组,其中A定义为case class A(id: Int, data: String)dataFuture的类型是Future [Array [A]]

我想使用idsFuture中的ID来过滤dataFuture

例如 -

 case class A(id: Int, data: String)
 val dataFuture = Future(Array(A(1,"a"), A(2,"b"), A(3,"c")))
 val idsFuture = Future(List(1,2))

我应该得到另一个有阵列的未来((A(1,“a”),A(2,“b”))

我目前正在做

idsFuture.flatMap{
   ids => dataFuture.map(datas => datas.filter(data => ids.contains(data.id)))}

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

您可以在此使用for-comprehension代替flatMap + map,如下所示:

for {
  ds <- dataFuture
  idsList <- idsFuture
  ids = idsList.toSet
} yield ds filter { d => ids(d.id) }

请注意apply上的Setcontains上的List更快。