2012-09-12 34 views
2

我試圖找到一種(功能)的方法來將對象的集合添加到在這些對象的成員上鍵入的地圖中。將對象添加到在這些對象的成員上鍵入的地圖

比方說,我有以下對象(他們是同一類O的所有實例):

o1(a = 1, b = x) 
o2(a = 1, b = y) 
o3(a = 2, b = z) 

我要生成在包含下列元組成員a一個Map鍵:

(1, List(o1, o2)) 
(2, List(o3)) 

現在我明顯可以做到這一點,通過我的初始列表中的每個對象,並在我走的時候添加它們。但我覺得我錯過了這麼做的功能性方法。我一直在努力使用地圖,flatMaps和過濾器來達到目的,但目前爲止沒有結果。

回答

3

groupBy是你想要什麼:

scala> val os = List(O(1,2), O(1,3), O(2,4)) 
os: List[O] = List(O(1,2), O(1,3), O(2,4)) 

scala> os.groupBy(_.a) 
res3: scala.collection.immutable.Map[Int,List[O]] = Map(1 -> List(O(1,2), O(1,3)), 2 -> List(O(2,4))) 
+0

媽的,我是如此接近,但我不知道GROUPBY甚至存在。非常感謝,就像在錫上宣傳的那樣工作;) – Guillaume