通过分组转换列表

时间:2015-05-29 11:08:49

标签: scala

考虑以下案例类:

case class Objective(goalId: Int, goalName: String, complete: Boolean)

case class Goal(id: Int, name: String, objectives: List[Objective])

我有一个从数据库中检索的目标列表。我想将它们转换成目标列表。在Scala中执行此操作的惯用方法是什么?

基本上,我需要:

  • goalIdgoalName
  • 对目标进行分组
  • goalId映射到id,将goalName映射到name
  • 将每个目标的objectives设置为目标组

我知道如何用英语表达,而不是Scala。

2 个答案:

答案 0 :(得分:3)

我相信以下代码可以满足您的需求:

 > objs.groupBy(o => (o.goalId -> o.goalName)).map{ case ((id,name),os) => Goal(id,name,os) }

其中objsList[Objective]

答案 1 :(得分:1)

要按List[Objective]goadIdgoalName进行分组,请尝试

objList.groupBy( o => (o.goalId,o.goalName) )

Objective goalIdgoalName的地图投放到与地图密钥值匹配的实例上。

获取与Goal匹配的List[Goal] o: Objective尝试

goalList.find(g => g.goalId == o.goalIf && g.name == g.goalName)

提供了Option,即Some(goal)找到匹配,否则为None