2013-11-20 428 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