在我的代码中,我有以下Map定义了嵌套映射,我想使用函数getTags
获取Map的这个值(嵌套Map),这会产生以下错误:
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
函数之前,我得到的错误是:
scala> def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = {
| tags.map {_._2}
| }
<console>:12: error: type mismatch;
found : scala.collection.immutable.Iterable[Map[String,List[String]]]
required: Map[String,List[String]]
tags.map {_._2}
^
因此toMap
之前返回的类型为Iterable[Map[String, List[String]]]
。
如何抓住Map[String, List[String]]
?
感谢对此问题的任何帮助。
答案 0 :(得分:1)
错误是因为函数Map[String, List[String]]
的返回类型表示您将返回单个Map
。但是你的功能:
def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = {
tags.map(_._2)
}
会返回多个Maps
,因为调用.map
会返回Iterable
。要修复错误,您可以执行以下操作:
def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = {
tags.map(_._2).head
}
但这可能不是你的逻辑应该是什么,并且如果地图是空的,也会抛出异常。
答案 1 :(得分:0)
尝试将Map()转换为toList,这可能对您有所帮助