我有一个包含具有 getName() 和 getYearOfBirth() 方法的 Person 对象的人员列表。我正在使用 groupBy 对 Person 对象进行分组。我正在使用 groupBy 对 Person 对象进行分组,但我只想将名称放入映射中,因为 Person 将来会有很多附加字段。岁月将是 key 。
class Person {
String name
int yearOfBirth
}
def people = [
new Person(name:"Tom", yearOfBirth:1985),
new Person(name:"Abigail", yearOfBirth:1987),
new Person(name:"Joyce", yearOfBirth:1984),
new Person(name:"James", yearOfBirth:1987),
new Person(name:"Scott", yearOfBirth:1985),
new Person(name:"Ruth", yearOfBirth:1984)
]
//people.groupBy(_.year) mapValues (_ map (_.name)) how to map here?
这是 Scala app 的直接端口
最佳答案
一种解决方案是:
def nameInYear = people.groupBy { it.yearOfBirth }
.collectEntries { [ (it.key):it.value.name ] }
assert nameInYear[ 1984 ] == [ 'Joyce', 'Ruth' ]
因此,按出生年份对他们进行分组,以获得 YEAR->ListOfPeople map 然后,对于每个分组,收集 YEAR->ListOfNames
的 map关于groovy - 如何使用 groupby 在 Groovy 中为 map 值选择对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177050/