scala map java.util.NoSuchElementException:找不到键
如何以优雅的scala风格从映射中检索元素? 试一试似乎不太合适。 带有的支票是否包含最佳选项 尝试模式匹配不会捕获异常scala map java.util.NoSuchElementException:找不到键,scala,dictionary,exception,pattern-matching,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 { cas
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
}
我不知道您是否发现默认值更优雅,但它们比捕获异常要好
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
我不知道您是否发现默认值更优雅,但它们比捕获异常要好
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
你可以用它来理解它
val length = for(col1 <- myMap.get("col1");
str <- col1.get("XXX")) yield str.first
val res = length.getOrElse(0)
val length=for(col1可用于理解
val length = for(col1 <- myMap.get("col1");
str <- col1.get("XXX")) yield str.first
val res = length.getOrElse(0)
val length=for(可能是col1,您需要:myMap.get(“firstKey”).flatMap(u.get(“secondKey”)).fold(0){case s:String=>s.length}
这似乎有效。可能,您需要:myMap.get(“firstKey”).flatMap(u.get(“secondKey”)).fold(0){case s:String=>s.length}
这似乎有效。我认为这个解决方案更干净。比第一条注释更可读。我认为这个解决方案更干净。比第一条注释更可读。