Scala toMap类型转换问题

时间:2018-06-26 12:27:45

标签: scala type-conversion

我有以下简化的代码来表示我在Scala到Map转换中遇到的编译问题。

代码

def test() : Option[Map[String, String]] = {
val someMap = Map("" -> List.empty[String] )
someMap
  .get("")
  .flatMap(_.headOption)
  .map { span =>
    val map = mutable.Map.empty[String, String]
    map.toMap
  }}

我收到此错误

  

多态表达式不能实例化为期望的类型;发现   :[T,U] scala.collection.immutable.Map [T,U]必需:   scala.collection.concurrent.Map [String,String]           map.toMap

不确定如何解决此问题。我无法更改函数的返回类型,因为它期望返回Option[Map[String, String]]

谢谢, 桑迪

2 个答案:

答案 0 :(得分:0)

您尝试在返回类型中使用immutable Map,但是返回mutable.Map

  def test() : Option[Map[String, String]] = {

    val someMap = Map("" -> List.empty[String] )

    someMap
      .get("")
      .flatMap(_.headOption)
      .map { span =>
        Map.empty[String, String]
      }
 }

答案 1 :(得分:0)

导入scala.collection.mutable后,您的代码会编译。您得到的错误表明您的测试函数期望返回类型scala.collection.concurrent.Map[String,String]。我能想到的唯一原因是您在函数声明之前的某个位置导入了scala.collection.concurrent.Map

因此,immutable.Map类型被并发.Map类型掩盖,并且只需使用“ Map”就实际上声明了类型为Option[scala.collection.concurrent.Map[String, String]]的返回值,因此会产生编译错误。

尝试在导入类型声明(scala.collection.immutable.Map)中删除导入或使用完整路径。