2017-10-10 73 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) 
} 
相關問題