Scala中的Java HashMap引发错误

时间:2018-03-18 11:47:59

标签: scala

以下使用java.util.HashMap的Scala代码(我需要使用Java,因为它是用于Java接口)可以正常工作:

val row1 = new HashMap[String,String](Map("code" -> "B1", "name" -> "Store1"))
val row2 = new HashMap[String,String](Map("code" -> "B2", "name" -> "Store 2"))
val map1 = Array[Object](row1,row2) 

现在,我正在尝试动态创建map1

val values: Seq[Seq[String]] = ....
val mapx = values.map {
      row => new HashMap[String,String](Map(row.map( col => "someName" -> col)))  <-- error
     }
val map1 = Array[Object](mapx) 

但是我得到以下编译错误:

  

类型不匹配; found:Seq [(String,String)] required:(?,?)

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我们可以更简化您的代码:

val mapx = Map(Seq("someKey" -> "someValue"))

这仍会产生相同的错误消息,因此错误实际上与您使用Java HashMap无关,而是尝试使用Seq作为Scala的Map参数}。

问题是Map是可变参数并且期望键值对作为其参数,而不是包含它们的某些数据结构。在Java中,也可以使用数组调用可变方法,而无需任何类型的转换。在Scala中不是这样。在Scala中,您需要使用: _*在调用可变方法时将序列显式转换为参数列表。所以这有效:

val mapx = Map(mySequence : _*)

或者,您可以使用.to_map从一系列元组创建Map

val mapx = mySequence.toMap