如何检查哪个实例是当前对象。具体检查它是否为Collection。
val maps = Map("s" -> 2, "zz" -> 23, "Hello" -> "World", "4" -> Map(11 -> "World"), "23333" -> true);
for(element <- maps) {
if(element.isInstanceOf[Map]) { // error here
print("this is a collection instance ");
}
println(element);
}
答案 0 :(得分:0)
如果您想检测任何Map
:
for(element <- maps) {
if(element.isInstanceOf[Map[_, _]]) {
print("this is a collection instance ")
}
println(element)
}
但这不起作用,因为你检查整个元组(“s” - &gt; 2等)而不是元组的第二个元素:
for(element <- maps) {
if(element._2.isInstanceOf[Map[_, _]]) {
print("this is a collection instance ")
}
println(element._2)
}
或者使用模式匹配:
for((_, v) <- maps) {
if(v.isInstanceOf[Map[_, _]]) {
print("this is a collection instance ")
}
println(v)
}
或者更多模式匹配:
maps foreach {
case (_, v: Map[_, _]) => println("this is a collection instance " + v)
case (_, v) => println(v)
}
答案 1 :(得分:0)
为了能够编译您的代码段,请将其更改为
if (element.isInstanceOf[Map[_, _]]) {
但是当你在迭代“键/值对”时,它永远不会匹配。
所以你可能想要这样的东西:迭代值:
maps.values.foreach {
case (m: Map[_, _]) => println(s"Map: $m" )
case x => println(x)
}
或者如果要迭代键/值对:
maps foreach {
case (key, m: Map[_, _]) => println(s"Map: $key -> $m" )
case (key, value) => println(s"$key -> $value")
}