我有一系列id和一个函数,它为每个id返回一个Option [workItem]。我想做的就是从这两件事中生成一系列workItem。我尝试了各种地图组合,foreach和理解,没有任何作用。
def getWorkItems(ids: Future[Seq[Id]]): Future[Seq[Option[WorkItem]]] = {
ids.map {
id: workItemId => id.map(getWorkItem(_)
}
}
这给了我错误 - Seq类型的表达式[Option [WorkItem]不符合预期类型_B
我试过foreach -
def getWorkItems(ids: Future[Seq[Id]]): Future[Seq[Option[WorkItem]]] = {
ids.map {_.foreach(getWorkItem(_)}
}
这给了我错误 - 单位类型的表达式不符合预期的类型_B
我不确定这个_B类型是什么,我该如何进行这种转换。
答案 0 :(得分:1)
几乎可以按预期工作。
trait o {
class Id {}
class WorkItem { }
def getWorkItem(id: Id): Option[WorkItem]
def getWorkItems(ids: Future[Seq[Id]]): Future[Seq[Option[WorkItem]]] = {
val res = ids.map { idsSeq =>
idsSeq.map { id =>
getWorkItem(id)
}
}
res
}
}
但至于我getWorkItems
应该返回Future[Seq[WorkItem]]
而不是内部map
,您可以使用flatMap
def getWorkItems(ids: Future[Seq[Id]]): Future[Seq[WorkItem]] = {
val res = ids.map { idsSeq =>
idsSeq.flatMap { id =>
getWorkItem(id)
}
}
res
}