检查值是等于字符串还是包含字符串的数组

时间:2017-05-16 06:34:38

标签: scala

Scala地图包含一个键X。 该值可以是字符串数组Array("Y") 或一个简单的String对象"Y"。 我需要从地图中检索值并测试

如果值是字符串,

mayMap("X")=="Y"

或者,如果值是数组。

myMap("X").contains("Y")

我不想首先使用if语句语句来检查值的第一个类型。一种选择是编写一个检查值的函数,如果它是一个数组然后返回数组,否则创建一个包含在映射中的单个字符串元素的数组。然后呼叫将是:

myToArrayFunction(myMap("X")).contains("Y")

这就是我在Java中实际做的事情。

但这是Scala。使用预先存在的函数在一行中有更好的成语吗?

2 个答案:

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