使用重复键将对象列表转换为映射

时间:2017-03-02 10:25:55

标签: scala list dictionary duplicates

我有一个看起来像这样的课程:

case class Person(id : String, name : String, refId : String) {}

我有一份人员名单。

我想要一张带有
的地图 key = refId
value =列出[人物]具有相同的refId (重复键)

我做了什么:

val persons = getPersons() // get the List from somewhere
val refMap = new mutable.HashMap[String,Seq[Person]]()
for (person<- persons){
  refMap.put(person.refId,refMap.getOrElse(person.refId,new ArrayBuffer[Person]) :+ person)
}

这是我的第一个想法并且它有效,但我想要更像Scala的东西或看起来更好的东西。你有什么想法吗?

我也尝试过这里写的内容:Convert List of tuple to map (and deal with duplicate key ?)

但是他们使用Tuple而我也无法完成这项工作。 我还尝试将我的列表首先映射到元组但是 1.当不需要时,我不想在List上迭代2次(创建元组一次,创建地图一次。) 我试过了,但我的元组也失败了。

任何有关更好代码的帮助都会很好。

1 个答案:

答案 0 :(得分:5)

尝试groupBy

getPersons().groupBy(_.refId): Map[String, List[Person]]