在scala中输出映射值的问题

Tom*_*Tom 11 scala

我有以下代码片段:

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)

  • `apply`是一种神奇的方法,如果你'调用'一个对象就会被调用.`map("City")`相当于`map.apply("City")`. (4认同)

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文档以获取更多好处.