我有以下代码片段:
val map = new LinkedHashMap[String,String]
map.put("City","Dallas")
println(map.get("City"))
Run Code Online (Sandbox Code Playgroud)
这输出Some(Dallas)而不仅仅是Dallas.我的代码有问题吗?
谢谢
mic*_*ebe 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
Run Code Online (Sandbox Code Playgroud)
ped*_*rla 12
这不是一个真正的问题.
虽然Java的Map版本用于null指示某个键没有关联值,但Scala会Map[A,B].get返回a Options[B],它可以是,Some[B]或者NoneNone与java的角色类似null.
REPL会话显示这有用的原因:
scala> map.get("State")
res6: Option[String] = None
scala> map.get("State").getOrElse("Texas")
res7: String = Texas
Run Code Online (Sandbox Code Playgroud)
或者不推荐但很简单get:
scala> map.get("City").get
res8: String = Dallas
scala> map.get("State").get
java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:262)
Run Code Online (Sandbox Code Playgroud)
查看Option文档以获取更多好处.