我有以下代码段:
val map = new LinkedHashMap[String,String]
map.put("City","Dallas")
println(map.get("City"))
这会输出Some(Dallas)
,而不仅仅是Dallas
。我的代码有问题吗?
谢谢
答案 0 :(得分:18)
使用apply
方法,它会直接返回String
,如果找不到密钥则会抛出NoSuchElementException
:
scala> import scala.collection.mutable.LinkedHashMap
import scala.collection.mutable.LinkedHashMap
scala> val map = new LinkedHashMap[String,String]
map: scala.collection.mutable.LinkedHashMap[String,String] = Map()
scala> map.put("City","Dallas")
res2: Option[String] = None
scala> map("City")
res3: String = Dallas
答案 1 :(得分:12)
这不是一个真正的问题。
虽然Java的Map版本使用null
来表示某个键没有关联的值,但Scala的Map[A,B].get
会返回Options[B]
,可以是Some[B]
或{ {1}}和None与java的None
扮演类似的角色。
REPL会话显示了这有用的原因:
null
或者不推荐但简单的scala> map.get("State")
res6: Option[String] = None
scala> map.get("State").getOrElse("Texas")
res7: String = Texas
:
get
查看Option文档以获取更多好处。
答案 2 :(得分:2)
还有两种方法可以处理Option
结果。
你可以模式匹配它们:
scala> map.get("City") match {
| case Some(value) => println(value)
| case _ => println("found nothing")
| }
Dallas
或者在 Scala编程中出现了另一种巧妙的方法。使用foreach
处理结果。如果结果是Some
类型,则将使用它。否则(如果它是None
),没有任何反应:
scala> map.get("City").foreach(println)
Dallas
scala> map.get("Town").foreach(println)