将类型`Any`转换为在scala中键入`Map`

时间:2017-05-20 07:44:36

标签: scala

如何在scala中将类型Any转换为Map类型?

现在我有这个val:

poop: scala.collection.immutable.Map[String,Any] = Map(scenario0 -> Map(street -> Bulevard, city -> Helsinki), scenario1 -> Map(street -> Bulevard, city -> Helsinki))

我正在尝试提取与Mapscenario0相关联的scenario1个对象,并将这些地图传递给一个函数。

2 个答案:

答案 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))