2017-10-10 8 views
-2

[문자열, 문자열]을지도하고 나는 다음과 같은 예외를 참조하십시오유형 캐스트지도 [문자열, 개체] 내가 스칼라 새로운 오전

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 : 여기

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

은 조각이다 headers의 데이터 유형이 Map[String, String]이고 data의 데이터 유형이 Map<String, Object>인지 확인하십시오. 이 문제를 해결하려면 어떻게 입력 할 수 있습니까? 알바와 Tanjin에 의해 제안

UPDATE

의 변경. data 유형 java.util.Map[...]의처럼

[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

이 보이는,하지만 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) 
}