scala map java.util.NoSuchElementException:找不到优雅的键

时间:2017-01-04 20:51:33

标签: scala dictionary exception pattern-matching

如何以优雅的scala样式从地图中检索元素? 试试看起来并不合适。 支票是否包含最佳选项?

尝试模式匹配不会捕获异常。

case class SomeClass(first: Int, second:String)
val someClass = SomeClass(1, "foo")
val myMap = Map("firstKey" -> Map("secondKey" -> someClass))
myMap(("col1"))("XXX") match {
    case s:String => s.first
    case _ => 0
  }

2 个答案:

答案 0 :(得分:2)

我不知道您是否发现默认设置更优雅,但它们比捕获例外要好。

val myMap = Map("firstKey" -> 
                 Map("secondKey" -> "someValue").withDefaultValue(""))
                            .withDefaultValue(Map().withDefaultValue(""))

myMap("firstKey")("secondKey").length  // res0: Int = 9
myMap("firstKey")("secondK").length    // res1: Int = 0
myMap("firstK")("secondKey").length    // res2: Int = 0

答案 1 :(得分:2)

你可以用它来理解它

val length = for(col1 <- myMap.get("col1");
                 str <- col1.get("XXX")) yield str.first
val res = length.getOrElse(0)