说我有一组人Set[People]
。每个人都有一个年龄。我想创建一个函数,它创建一个Map[Int, Seq[People]]
,其中对于每个年龄,例如0到100,如果没有那个年龄的人,那么将会有一个具有该年龄的人序列或空序列原始系列。
即。我正在做一些事情
Set[People].groupBy(_.age)
输出
Map[Int, Seq[People]](0 -> Seq[John,Mary], 1-> Seq[People](), 2 -> Seq[People](Bill)...
groupBy
当然会省略所有没有人的年龄。我该如何实现呢?
答案 0 :(得分:1)
为地图配置默认值:
val grouped = people.groupBy(_.age).withDefaultValue(Set())
如果您需要将值作为序列,则可以映射它们
val grouped = people.groupBy(_.age).mapValues(_.toSeq).withDefaultValue(Seq())
请记住,正如文档所说:
Note: `get`, `contains`, `iterator`, `keys`, etc are not affected by `withDefault`.
答案 1 :(得分:0)
由于您的地图上没有与年龄相对应的空序列,因此可以使用空集合填充其余部分:
val fullMap = (0 to 100).map (index => index -> map.getOrElse(index, None)).toMap