考虑以下案例类:
case class Objective(goalId: Int, goalName: String, complete: Boolean)
case class Goal(id: Int, name: String, objectives: List[Objective])
我有一个从数据库中检索的目标列表。我想将它们转换成目标列表。在Scala中执行此操作的惯用方法是什么?
基本上,我需要:
goalId
和goalName
goalId
映射到id
,将goalName
映射到name
objectives
设置为目标组我知道如何用英语表达,而不是Scala。
答案 0 :(得分:3)
我相信以下代码可以满足您的需求:
> objs.groupBy(o => (o.goalId -> o.goalName)).map{ case ((id,name),os) => Goal(id,name,os) }
其中objs
是List[Objective]
。
答案 1 :(得分:1)
要按List[Objective]
和goadId
对goalName
进行分组,请尝试
objList.groupBy( o => (o.goalId,o.goalName) )
将Objective
goalId
和goalName
的地图投放到与地图密钥值匹配的实例上。
获取与Goal
匹配的List[Goal]
o: Objective
尝试
goalList.find(g => g.goalId == o.goalIf && g.name == g.goalName)
提供了Option
,即Some(goal)
找到匹配,否则为None
。