简体   繁体   English

Scala将Seq [Object]转换为Map [String,Map [String,String]]

[英]Scala convert Seq[Object] to Map[String, Map[String, String]]

I am new to Scala so I am a bit fighting with maps. 我是Scala的新手,所以我有点想与地图作战。

I have 我有

val items = Seq[MyModel]

where MyModel (came from Java) contains getLang, getName and getMessage methods. 其中MyModel(来自Java)包含getLang,getName和getMessage方法。

Now I need to fill up the 现在我需要填写

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

to contain values grouped by lang in structure: lang -> (name -> message). 在结构中包含按lang分组的值:lang->(名称-> message)。 Name property is unique. 名称属性是唯一的。 Thank you. 谢谢。

Maybe this will help you: 也许这会帮助您:

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

It returns a Seq[String] because there might be several messages for the same language and name. 它返回一个Seq[String]因为相同的语言和名称可能会有多个消息。 Not sure how you want to handle that case. 不确定您要如何处理这种情况。

This should do the trick: 这应该可以解决问题:

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

I hope this helps you. 我希望这可以帮助你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM