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

Scala将Seq[Object]转换为Map[String,Map[String,String]],scala,Scala,我是Scala的新手,所以我对地图有点抵触 我有 val items = Seq[MyModel] 其中MyModel(来自Java)包含getLang、getName和getMessage方法 现在我需要把油加满 var loadedMessagesMap: Map[String, Map[String, String]] = ListMap.empty 在结构中包含按lang分组的值:lang->(名称->消息)。Name属性是唯一的。 谢谢。这应该可以做到: val模型:Seq[MyM

我是Scala的新手,所以我对地图有点抵触

我有

val items = Seq[MyModel]
其中MyModel(来自Java)包含getLang、getName和getMessage方法

现在我需要把油加满

var loadedMessagesMap: Map[String, Map[String, String]] = ListMap.empty
在结构中包含按lang分组的值:lang->(名称->消息)。Name属性是唯一的。
谢谢。

这应该可以做到:

val模型:Seq[MyModel]=???
val mapped=models.map{model=>
model.getLang->Map(model.getName->model.getMessage)
}汤玛普先生

我希望这对您有所帮助。

这应该可以做到:

val模型:Seq[MyModel]=???
val mapped=models.map{model=>
model.getLang->Map(model.getName->model.getMessage)
}汤玛普先生

我希望这对您有所帮助。

也许这会对您有所帮助:

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

它返回一个
Seq[String]
,因为同一语言和名称可能有多条消息。不确定您想如何处理该案件。

也许这会帮助您:

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

它返回一个
Seq[String]
,因为同一语言和名称可能有多条消息。不知道你想怎么处理这个案子。

谢谢,我马上就到了。你能帮我避免这个吗?类型失配;找到:scala.collection.immutable.Map[String,(String,String)],必需:Map[String,Map[String,String]]。我需要返回Map[String,Map[String,String]]中的值。对不起,菜鸟:-)嗯,那么你也想按名字分组?你得到这个错误是因为我实际上在那里构建了一个字符串到元组的映射;如果这就是你想要的,请告诉我:)很好。但是我没有收到关于替换(model.getName,model.getMessage)的评论。这是答案的早期版本吗?实际上,在我的例子中不需要按名称分组,但我需要扩展api中的结构。尽管我在Seq中有两个模型(相同的语言、不同的名称和消息),但您所做的修改只产生了一个项目。谢谢您,我正在实现这一目标。您能帮我避免这种情况吗?类型失配;找到:scala.collection.immutable.Map[String,(String,String)],必需:Map[String,Map[String,String]]。我需要返回Map[String,Map[String,String]]中的值。对不起,菜鸟:-)嗯,那么你也想按名字分组?你得到这个错误是因为我实际上在那里构建了一个字符串到元组的映射;如果这就是你想要的,请告诉我:)很好。但是我没有收到关于替换(model.getName,model.getMessage)的评论。这是答案的早期版本吗?实际上,在我的例子中不需要按名称分组,但我需要扩展api中的结构。尽管我在Seq中有两个模型(相同的语言,不同的名称和消息),但您所做的修改只产生了一个项目。谢谢。到达那里。我不需要为同一个lang/name处理多条消息。这种情况不会发生(在FW后端,他们也不关心这一点)。我把
models.groupBy(u.getName).mapValues(u.map(u.getMessage).last)
作为第三行,但我想这不是最好的解决方案:-)@LukasJelinek没问题。如果您确定列表不会为空,则可以使用.last或.head从列表中获取消息。谢谢。到达那里。我不需要为同一个lang/name处理多条消息。这种情况不会发生(在FW后端,他们也不关心这一点)。我把
models.groupBy(u.getName).mapValues(u.map(u.getMessage).last)
作为第三行,但我想这不是最好的解决方案:-)@LukasJelinek没问题。如果确定列表不会为空,则可以使用.last或.head从列表中获取消息。