2017-10-10 20 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

dataのように見えるタイプjava.util.Map[...]のですが、mapValues方法がscala.collection.Map[...]です。 .toMapが、それは不変になります...また

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

.toMap.asScalaので、変更可能なMapを返します追加

+0

あなたの輸入は?どのようなものがありますが、スカラ座の可変バージョンをインポートします万が一の地図ですか? –

1

ない方法:あなたが.asScalaメソッドを使用して、それを変換する必要があるので、(JavaConverters輸入によって暗黙的にもたらしました。これは動作しますか?

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) 
} 
関連する問題