如何使用groupby为Scala中的贴图值选择对象字段

如何使用groupby为Scala中的贴图值选择对象字段,scala,Scala,这是一个新手scala问题。我有一个使用getName()和getYearOfBirth()方法的Person对象的人员列表。我正在使用groupBy对Person对象进行分组,但我只希望将 在地图中输入人名以后会有很多额外的字段。岁月将是关键 val people = List( Person("Tom", 1985), Person("Abigail", 1987), Person("Joyce", 1984), Person("James", 1987), Person("Scot

这是一个新手scala问题。我有一个使用
getName()
getYearOfBirth()方法的Person对象的人员列表。我正在使用groupBy对Person对象进行分组,但我只希望将
在地图中输入人名以后会有很多额外的字段。岁月将是关键

val people = List(
Person("Tom", 1985),
Person("Abigail", 1987),    
Person("Joyce", 1984),
Person("James", 1987),
Person("Scott", 1985),  
Person("Ruth", 1984)
)


var birthdayMap = people.groupBy(x=> x.getYearOfBirth()) // map to getName() ?

Scala 2.13
开始,大多数集合都提供了一种方法,该方法相当于
groupBy
,后跟
mapValues

people.groupMap(_.yearOfBirth)(_.name)
// Map[Int,List[String]] = Map(1985 -> List(Tom, Scott), 1984 -> List(Joyce, Ruth), 1987 -> List(Abigail, James))
// equivalent to people.groupBy(_.yearOfBirth).mapValues(_.map(_.name))
鉴于:

case class Person(name: String, yearOfBirth: Int)
val people = List(Person("Tom", 1985), Person("Abigail", 1987), Person("Joyce", 1984), Person("James", 1987), Person("Scott", 1985), Person("Ruth", 1984))

太好了,vielen Dank。我使用scalaj集合将映射返回为java.util.Map。但是,键值是scala.collection.mutable.Buffer。如何从Java访问缓冲区中的各个名称?@Reimeus我不太理解你的问题。但是如果您从Java访问它,我可以提示您使用
collection.JavaConversions.bufferAsJavaList
。谢谢,我决定在Scala helper对象中进行所有集合迭代,而不是传递到Java层,这样会更干净。
case class Person(name: String, yearOfBirth: Int)
val people = List(Person("Tom", 1985), Person("Abigail", 1987), Person("Joyce", 1984), Person("James", 1987), Person("Scott", 1985), Person("Ruth", 1984))