2017-04-10 89 views
0

我是Scala的新手,所以我有點與地圖戰鬥。Scala將Seq [Object]映射爲Map [String,Map [String,String]]

val items = Seq[MyModel] 

其中爲MyModel(從爪哇來到)包含getLang,和的getName方法的getMessage。

現在我需要填補

var loadedMessagesMap: Map[String, Map[String, String]] = ListMap.empty 

包含郎在結構上分組值:郎 - >(名稱 - >消息)。名稱屬性是唯一的。 謝謝。

回答

2

也許這將幫助你:

val result: Map[String, Map[String, Seq[String]]] = items.groupBy(_.getLang).map { 
    case(lang, models) => 
    lang -> models.groupBy(_.getName).mapValues(_.map(_.getMessage)) 
} 

它返回一個Seq[String],因爲有可能是相同的語言和名稱的幾個消息。不知道你想如何處理這種情況。

+0

謝謝。到達那裏。我不需要關心同一個lang/name的多個消息。這種情況不會發生(他們也不關心FW後端)。我做了'models.groupBy(_。getName).mapValues(_。map(_。getMessage).last)'作爲第三行,但我想這不是最好的解決方案:-) –

+0

@LukasJelinek沒關係。如果您確定列表不會爲空,您可以使用.last或.head從列表中獲取消息。 – nmat

0

這應該做的伎倆:

val models: Seq[MyModel] = ??? 
val mapped = models.map { model => 
    model.getLang -> Map(model.getName -> model.getMessage) 
}.toMap 

我希望這可以幫助你。

+0

謝謝,我到了那裏,你能幫我如何避免這種情況? 類型不匹配;找到:scala.collection.immutable.Map [String,(String,String)],必需:Map [String,Map [String,String]]。我需要返回值:Map [String,Map [String,String]]。對不起,新手:-) –

+0

嗯,所以你還想按名稱分組?你得到的錯誤是因爲我實際上在那裏爲元組構建了一個字符串映射。 –

+0

我現在編輯答案,它應該做的伎倆;讓我知道如果這就是你要找的:) –

相關問題