Scala地图包含一个键X
。
该值可以是字符串数组Array("Y")
或一个简单的String对象"Y"
。
我需要从地图中检索值并测试
如果值是字符串,
mayMap("X")=="Y"
或者,如果值是数组。
myMap("X").contains("Y")
我不想首先使用if
语句语句来检查值的第一个类型。一种选择是编写一个检查值的函数,如果它是一个数组然后返回数组,否则创建一个包含在映射中的单个字符串元素的数组。然后呼叫将是:
myToArrayFunction(myMap("X")).contains("Y")
这就是我在Java中实际做的事情。
但这是Scala。使用预先存在的函数在一行中有更好的成语吗?
答案 0 :(得分:3)
这应该有效:
myMap.get("X") match {
case None => println("oh snap!")
case Some(x) => x match {
case i: String => println(s"hooray for my String $i") // do something with your String here
case a: Array[String] => println(s"It's an Array $a") // do something with your Array here
}
}
答案 1 :(得分:1)
case class Y(name: String)
//val a = Map[String, Any]("X" -> "Y")
val a = Map[String, Any]("X" -> Y("Peter"))
a.getOrElse("X", "Default") match {
case s: String => println(s)
case Y(name) => println(name)
}
你也可以使用这样的东西:
//val a = Map[String, Any]("X" -> "Y")
val a = Map[String, Any]("X" -> Y("Peter"))
a.map(v => println(v._2))