2017-09-15 140 views
0

想象我有凝結斯卡拉地圖

case class Thing(intValue: Int, stringValue: String) 

有了這個,我可以做一個地圖:[詮釋,事情]

val myMap = Map(1->Thing(100,"abc"), 2->Thing(100,"abcd"), 3->Thing(100,"abcde"), 4->Thing(200,"xyz")) 

在地圖原始關鍵並不重要。我想這個數據結構以某種方式轉換成

地圖(100->序列( 「ABC」, 「ABCD」, 「ABCDE」),200->序列( 「XYZ」))

+1

做你嘗試過這麼遠嗎? – michaJlS

回答

1

您可以通過GROUPBY

myMap.groupBy(_._2.intValue).mapValues(_.values.map(_.stringValue)) 
+0

謝謝你們。我選擇了這個答案,因爲它似乎是最簡潔的 –

+0

答案中的'mapValues'的常見警告:它很懶惰,所以如果你需要兩次訪問同一個鍵,它會重新計算值,在這種情況下, - 三方(OTOH,如果你不需要訪問一個密鑰,你不需要付錢)。所以仔細考慮它的使用。 –

1

快速髒

myMap.groupBy(_._2.intValue).map{ case (k,v) => (k, v.toList.map(_._2.stringValue))}