以下使用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:(?,?)
如何解决这个问题?
答案 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