从另一个序列生成新的scala序列

时间:2015-11-10 22:33:59

标签: scala seq

我有一系列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类型是什么,我该如何进行这种转换。

1 个答案:

答案 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
  }