find()
возвращает Option
в случае, если то, что вы ищете, не может быть найдено.
val mapB: Option[Map[String, Any]] = items.find(_("name") == "B") //safe
или
val mapB: Map[String, Any] = items.find(_("name") == "B").get //unsafe, might throw
Для извлечения size
значение из первого Map
, где "name" -> "B"
вы можете сделать что-то вроде этого.
val sz :Any = items.find(m => m.get("name").contains("B")
&& m.get("size").nonEmpty).fold(0:Any)(_("size"))
Обратите внимание, что sz
имеет тип Any
, потому что это тип значений Map
.Это означает, что вам придется разыграть его (обескуражить), набрав Int
, прежде чем вы сможете сделать что-нибудь полезное с ним.
Избегайте ввода Any
.Это верный признак того, что вы идете в неправильном направлении.