2017-10-10 26 views
-2

Je suis nouveau à scala et je vois l'exception suivante:Type de Cast Carte [String, Object] pour Carte [String, String]

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

Voici l'extrait:

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!!! 
} 

I sachez que le type de données de headers est Map[String, String] et celui de data est Map<String, Object>. Comment puis-je taper ceci pour résoudre le problème?

MISE À JOUR

a apporté les modifications suggérées par Alvaro et Tanjin. Maintenant, je reçois cette exception:

Maintenant je:

[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

Répondre

2

On dirait data est de type java.util.Map[...], mais la méthode est mapValues sur scala.collection.Map[...]. Vous avez donc besoin de le transformer en utilisant la méthode .asScala (apporté implicitement par l'importation JavaConverters:

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

Ajoutez également un .toMap depuis .asScala retournera un Map mutable ... .toMap rend immuable

+0

Quels sont vos importations? êtes-vous importent une version mutable de scala Carte de par hasard? –

1

Comment fonctionne. ce travail?

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) 
}