2017-10-10 47 views
-2

我是新来斯卡拉,我看到以下异常:强制类型转换地图[字符串,对象]到地图[字符串,字符串]

value mapValues is not a member of java.util.Map[String,Object] 
[error] headers = Option(data).map(_.mapValues(_.toString)).getOrElse(Map()), 
[error]        ^

下面是摘录:

import scala.collection.JavaConverters._ 
def toMessage(properties: AMQP.BasicProperties, body: Array[Byte]): Message = { 
    Message (
     headers = Option(data).map(_.mapValues(_.toString)).getOrElse(Map())) <<----- THIS LINE HAS PROBLEMS!!! 
} 

我知道headers的数据类型是Map[String, String]data的数据类型是Map<String, Object>。我如何输入这个来解决这个问题?

UPDATE

制造阿尔瓦罗和Tanjin建议的修改。现在我得到这个异常:

现在我得到:

[error] found : Map[String,String] (in scala.collection) 
[error] required: Map[String,String] (in scala.collection.immutable) 
[error]  headers   = Option(properties.getHeaders).map(_.asScala.mapValues(_.toString)).getOrElse(Map()) 
[error]                         ^
+0

'getOrElse(collection.immutable.Map())' – jwvh

回答

2

貌似datajava.util.Map[...]类型,但mapValues方法是scala.collection.Map[...]。所以,你需要使用.asScala方法来改造它(由JavaConverters进口隐含带来:

Option(data).map(_.asScala.toMap.mapValues(_.toString)).getOrElse(Map.empty)) 

还添加.toMap因为.asScala会返回一个可变Map ... .toMap使得一成不变

+0

你有什么进口的?你导入可变阶的版本有任何机会的地图? –

1

如何。这项工作?

import scala.collection.JavaConverters._ 
def toMessage(properties: AMQP.BasicProperties, body: Array[Byte]): Message = { 
    Message (
    headers = Option(data) 
     .map(_.asScala) 
     .getOrElse(collection.immutable.Map.empty) 
     .mapValues(_.toString) 
} 
相关问题