В scala scala.collection.immutable.$colon$colon
просто означает, что данные scala.collection.immutable.List
, поскольку List
сгенерированы с использованием нотации cons
(::
).
Итак, ошибка
scala.collection.immutable. $ Colon $ colon нельзя преобразовать в scala.collection.ListBuffer
означает, что вы пытаетесь преобразовать List
в ListBuffer
, и они не совместимы.
Итак, вы можете изменить ListBuffer
на List
на
val component = data.get("viewed_objects").get.asInstanceOf[List[Map[String, Any]]]
но это будет бесполезное приведение типа, так как data.get("viewed_objects").get
уже имеет List[Map[String, Any]]
тип
так просто делаю
val component = data.get("viewed_objects").get
//component: List[scala.collection.immutable.Map[String,Any]] = ...
будет достаточно
Надеюсь, ответ полезен
Обновление
Вы прокомментировали как
Кстати, если значением данных является data: Map (), что означает пустую Map, ваш код вернет исключение None.get исключение. Как с этим справиться изящно?
для этого вы используете Try
getOrElse
как
val component = Try(data.get("viewed_objects").get).getOrElse(List(Map.empty[String, Any]))
Или вы можете использовать сопоставление с шаблоном как
val component = data.get("viewed_objects") match {case Some(data) => data; case None => List(Map.empty[String, Any])}