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)))}
有更好的解决方案吗?
答案 0 :(得分:3)
您可以在此使用for-comprehension代替flatMap
+ map
,如下所示:
for {
ds <- dataFuture
idsList <- idsFuture
ids = idsList.toSet
} yield ds filter { d => ids(d.id) }
请注意apply
上的Set
比contains
上的List
更快。