从另一个序列生成新的 Scala 序列
Generate new scala sequence from another sequence
我有一个 ID 序列和一个函数,其中 return 每个 ID 都有一个 Option[workItem]。我想要做的就是从这两件事中生成一系列 workItem。我尝试了地图、foreach 和 for comprehension 的各种组合,但没有任何效果。
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(_)}
}
这给我错误 - 类型 Unit 的表达式不符合预期类型 _B
我不确定这个 _B 类型是什么以及我该如何进行这种转换。
几乎可以像您预期的那样工作。
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
应该 return 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
}
我有一个 ID 序列和一个函数,其中 return 每个 ID 都有一个 Option[workItem]。我想要做的就是从这两件事中生成一系列 workItem。我尝试了地图、foreach 和 for comprehension 的各种组合,但没有任何效果。
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(_)}
}
这给我错误 - 类型 Unit 的表达式不符合预期类型 _B
我不确定这个 _B 类型是什么以及我该如何进行这种转换。
几乎可以像您预期的那样工作。
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
应该 return 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
}