Scala:在带有嵌套映射的映射上使用toMap失败

Scala:在带有嵌套映射的映射上使用toMap失败,scala,Scala,在我的代码中,我定义了以下带有嵌套映射的映射,我希望使用函数getTags获取映射的此值,该函数会产生以下错误: scala> def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = { | tags.map {_._2}.toMap | } <console>:12: error: Cannot prove that Map[Str

在我的代码中,我定义了以下带有嵌套映射的映射,我希望使用函数getTags获取映射的此值,该函数会产生以下错误:

scala> def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = {
     |     tags.map {_._2}.toMap
     | }
<console>:12: error: Cannot prove that Map[String,List[String]] <:< (T, U).
           tags.map {_._2}.toMap
                           ^                                                                        ^
因此,在toMap之前返回的类型是Iterable[Map[String,List[String]]

我怎样才能拿到地图[字符串,列表[字符串]


感谢您在此问题上提供的帮助。

尝试将映射转换为toList,这可能会对您有所帮助。

错误是因为函数映射[String,List[String]]的返回类型指示您将返回单个映射。但是,您的职能是:

def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = {
  tags.map(_._2)
}
将返回许多映射,因为调用.map将返回一个Iterable。要修复此错误,您可以执行以下简单操作:

def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = {
  tags.map(_._2).head
}

但这可能不是您的逻辑应该是什么,如果映射为空,也会引发异常。

您的答案中的更多信息将是有益的。您有一个映射映射,您正在尝试获取哪些内部映射?谢谢!我最终使用了Hari推荐的toList函数,以返回许多映射并以此为基础建立我的逻辑。您是否更改了函数的返回类型?
def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = {
  tags.map(_._2).head
}