如何在scala中将类型Any
转换为Map
类型?
现在我有这个val:
poop: scala.collection.immutable.Map[String,Any] = Map(scenario0 -> Map(street -> Bulevard, city -> Helsinki), scenario1 -> Map(street -> Bulevard, city -> Helsinki))
我正在尝试提取与Map
和scenario0
相关联的scenario1
个对象,并将这些地图传递给一个函数。
答案 0 :(得分:7)
1)您可以将Any
投射到Map[A, B]
。
示例,以下是Map
String to another Map
scala> val mapping : Map[String, Any] = Map("key1" -> Map ("key1.1" -> "value1"), "key2" -> Map("key1.2" -> 100))
mapping: Map[String,Any] = Map(key1 -> Map(key1.1 -> value1), key2 -> Map(key1.2 -> 100))
scala> mapping("key1")
res1: Any = Map(key1.1 -> value1)
将Any
投射到Map[A, B]
scala> mapping("key1").asInstanceOf[Map[String, Any]]
res3: Map[String,Any] = Map(key1.1 -> value1)
然后传递给函数
scala> def processSomething(mapping: Map[String, Any]) = println(mapping.keys)
processSomething: (mapping: Map[String,Any])Unit
scala> processSomething(mapping("key1").asInstanceOf[Map[String, Any]])
Set(key1.1)
2)另一种方式是匹配mainMap("key")
的结果。
这样,当结果不是Map
时,你可以处理一个案例。 (使用强制转换会抛出类强制转换异常。)
以下示例
mapping("key1") match {
case valueMap : Map[String, Any] => processSomething(valueMap)
case _ => println("key1 is not Map")
}
答案 1 :(得分:0)
for (key <- myMap.keySet) myFunc(myMap(key))