Scala在groupBy之后使用map

时间:2014-12-11 15:57:56

标签: scala map group-by

鉴于此代码

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)));

如何重新映射以过滤我需要的信息,即按城市划分的平均年龄?

感谢您的帮助。

2 个答案:

答案 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)
相关问题