2013-11-20 181 views
0

我需要一个集合中变换像这样的斯卡拉类别:转换列表到地图

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

是多年作为密钥的地图和一个月的列表(只有一次发生)作为值。

我该怎么办?

回答

2

这是一个groupBy opertaion很简单:

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)) 
+2

添加'.distinct' .MAP后'(_个月。)',以减少每月列出每个独特每月一个条目按的问题。 – Shadowlands

+0

@Shadowlands谢谢! – Noah

+0

它工作出色。谢谢 – Max