2013-04-23 1 views
1

Ниже класса вызывает ошибку компиляции:Как построить неизменяемую карту Scala с изменяемой карты Java?

value toMap is not a member of 
java.util.Map[java.lang.String,java.util.List[com.recommendations.TestObject]] 


class ProcessData(var distanceMap : java.util.Map[java.lang.String , java.util.List[TestObject]]) { 

    def apply = { 

     val m2: Map[String, Any] = distanceMap.toMap 

    } 

} 

Эта строка вызывает ошибку:

val m2: Map[String, Any] = distanceMap.toMap 

ли ошибка, поскольку значение карт distanceMap является изменяемым java.util.List, следовательно, они ценности также должны быть неизменными?

Как я могу построить неизменяемую карту Scala с изменяемой дистанционной карты выше?

+0

возможно дубликат [Как конвертировать Java Map в лестницу карты типа LinkedHashMap \ [String, ArrayList \ [String \] \]] (http://stackoverflow.com/ вопросы/6573414/how-to-convert-java-map-to-scala-map-of-type-linkedhashmapstring-arrayliststri) –

ответ

2
import scala.collection.JavaConversions._ 

val m = new java.util.HashMap[String, Object]() 
m.put("Foo", java.lang.Boolean.TRUE) 
m.put("Bar", java.lang.Integer.valueOf(1)) 

val m2: Map[String, Any] = m.toMap 
println(m2); 
+0

ваш код не компилируется, java.util.Map - это интерфейс, а не конкретный класс, поэтому он не может экземпляр. .toMap method не является членом java.util.Map –

+0

Я получаю ошибку компилятора для выше кода: «Несколько маркеров в этой строке \t - значение toMap не является членом java.util.HashMap [String, java .lang.Object] \t - не может доказать, что Char <: <(T, U) \t - Неявные преобразования найдено: м. => augmentString (м) \t - не хватает аргументов для метода toMap: (неявный эв < : <[Char, (T, \t U)]) scala.collection.immutable.Map [T, U]. Неопределенный параметр значения ev. " –

+0

+1 кажется, что моя IDE глючит, спасибо –

1

Вам просто не хватает импорта JavaConversions. Ваш код будет компилироваться с:

import scala.collection.JavaConversions._ 
class ProcessData(var distanceMap : java.util.Map[java.lang.String , java.util.List[TestObject]]) { 
    def apply = { 
     val m2: Map[String, Any] = distanceMap.toMap 
    } 
}