Scala集合:将List转换为Map

时间:2013-11-20 21:56:10

标签: scala collections

我需要转换像这样的集合

case class Entity( year: Int, month: Int )

List( Entity(2013,01), Entity(2013,01), Entity(2013,03),
      Entity(2013,02), Entity(2013,02), Entity(2013,02),
      Entity(2014,07) )

在像这样的集合中:

Map( 2013 -> List(01,03,02) , 2014 -> List(07) )

这是一张地图,其中包含年份作为键,以及月份列表(仅出现一次)作为值。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

使用groupBy操作非常简单:

case class Entity( year: Int, month: Int )

val entities = List( Entity(2013,01), Entity(2013,01), Entity(2013,03),
    Entity(2013,02), Entity(2013,02), Entity(2013,02),
    Entity(2014,07) )

val mappedEntities = entities.groupBy(_.year)
                             .mapValues(list => list.map(_.month).distinct)

mappedEntities: scala.collection.immutable.Map[Int,List[Int]] = 
  Map(2014 -> List(7), 2013 -> List(1, 3, 2))