Как построить неизменяемую карту Scala из изменяемой карты Java?

2

Следующий класс вызывает ошибку компилятора:

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

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

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

Теги:
scala-java-interop

2 ответа

3
Лучший ответ
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 не является членом java.util.Map
  • 0
    Я получаю сообщение об ошибке компилятора для приведенного выше кода: «Несколько маркеров в этой строке - значение toMap не является членом java.util.HashMap [String, java.lang.Object] - Невозможно доказать, что Char <: <(T, U). - Найдено неявных преобразований: m => augmentString (m) - недостаточно аргументов для метода toMap: (неявный ev: <: <[Char, (T, U)]) scala.collection.immutable.Map [T, U]. Не указано значение параметра ev. "
Показать ещё 1 комментарий
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
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню