2015-05-29 65 views
1

考虑以下情形类转化的列表:通过分组

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

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

我已经从数据库中检索目标的列表。我想将它们转换成目标列表。在Scala中这样做的惯用方法是什么?

基本上,我需要:

  • 集团通过goalId目标和goalName
  • 地图goalIdidgoalNamename
  • 设置每个目标的objectives客观组

我知道如何用英文表达,但不是斯卡拉。

回答

3

我相信下面的代码实现,你在找什么:

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

其中objsList[Objective]

1

用于集合List[Objective]通过goadIdgoalName,尝试

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

它提供了从ObjectivegoalIdgoalName映射到那些符合地图的键的值是实例。

为了得到在List[Goal]Goal匹配的o: Objective尝试

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

它提供了一个Option,即Some(goal)是找到匹配,否则None