鉴于此代码
val list = List(
Person("John", "Paris", 1956);
Person("Jane", "London", 1954);
Person("James", "Paris", 1972);
Person("Marie", "London", 1959);
)
我想创建一个地图(key->值),其中键是城市,值是该城市居民的平均年龄。
我使用了groupBy方法:
val groupedByCity = list.groupBy(_.city);
哪位给我这个:
Map(Paris -> List(Person(Jonh, Paris, 1956), Person(James, Paris, 1972)), London -> List( Person(Jane, London, 1954), Person(Marie, London, 1959)));
如何重新映射以过滤我需要的信息,即按城市划分的平均年龄?
感谢您的帮助。
答案 0 :(得分:2)
在地图上使用.mapValues
,使用一个函数,其参数将是城市的人员列表。在该函数中,使用.map
将其设置为年龄列表,然后使用.sum
计算总数,并除以列表的大小。
答案 1 :(得分:1)
您可以使用
一次完成此操作 groupedByCity.mapValues( p => (0.0 /: p){_ + 2014 - _.age} / p.length)
}
//> res0: scala.collection.immutable.Map[String,Double] = Map(Paris -> 50.0, London -> 57.5)