Scala:用对象替换地图中的键?

时间:2012-07-20 17:33:20

标签: scala

我一直在处理稍微复杂的地图,我需要解决的最后一个问题是替换密钥为Map()的{​​{1}},并将其替换为{ {1}}。

地图看起来像:

Option[Long]

我有Option[User]的列表。我当时认为foldLeft可以做到这一点,但语法对我的业余性来说很棘手。我尝试了以下但没有成功:

(Map[ Option[Long], List[Tuple3[Job,Option[Client],Option[Project]]] ]()

下面的编译器错误表明我可能没有在正确的位置获取变量。

Option[User]

如何正确完成这项工作?

修改:已实现我还需要将第一个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

1 个答案:

答案 0 :(得分:3)

如果我理解正确,那么应该这样做。

val userMap = users map {u => (u, theMap(u map {_.id})} toMap

我不确定这里有多少Option个密钥,因为只有一个None密钥,但是如果你需要考虑该密钥,它可能不在{{1然后你可以单独添加它。

users