我一直在用稍微复杂的地图做一些工作,我需要解决的最后一个问题是替换Map()
键为 a 的 aOption[Long]
并将其替换为 a 的键Option[User]
。
地图看起来像:
(Map[ Option[Long], List[Tuple3[Job,Option[Client],Option[Project]]] ]()
我有一个Option[User]
. 我在想 foldLeft 可以解决问题,但是对于我的业余爱好来说,语法很棘手。我尝试了以下但没有成功:
theMap.foldLeft(users){
(u,j) =>
if(j._1!=None) {
Map(u, j._2)
} else {
Map(User.placeholder, j._2)
}
}.flatten
下面的编译器错误表明我可能没有在正确的位置获取变量。
type mismatch; found : List[Option[models.User]] required: (?, ?)
这如何才能正确完成?
编辑:意识到我还需要将第一个Long
键与user.id
. 如果我弄清楚了,我会更新它。
越来越近,只是切换到映射。但这有点麻烦:
allJobs.map{
case ((i,l)) =>
val user = users.map{ user =>
if(user.map(_.id)==i) user
}
Tuple2(user.head, l)
}