Scala toMap类型转换问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala toMap类型转换问题相关的知识,希望对你有一定的参考价值。

我有以下简化代码来表示我在scala toMap转换时遇到的编译问题。

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]]

谢谢,桑迪

答案

导入scala.collection.mutable后,您的代码会编译。您得到的错误表明您的测试函数需要返回scala.collection.concurrent.Map[String,String]类型。我能想到的唯一原因是你在宣布你的功能之前已经在某处导入了scala.collection.concurrent.Map

因此,immutable.Map类型被concurrent.Map类型屏蔽,并且通过简单地使用“Map”实际上声明了Option[scala.collection.concurrent.Map[String, String]]类型的返回,因此编译错误。

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

另一答案

您正在尝试在返回类型中使用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]
      }
 }

以上是关于Scala toMap类型转换问题的主要内容,如果未能解决你的问题,请参考以下文章

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

在代码片段中包含类型转换

Scala 中的显式类型转换

Scala:List[Tuple3] 到 Map[String,String]

scala强制转换不兼容类型而不会引发错误

Scala基础学习