在scala中输出映射值的问题

时间:2011-06-17 11:56:08

标签: scala

我有以下代码段:

val map = new LinkedHashMap[String,String]
map.put("City","Dallas")
println(map.get("City"))

这会输出Some(Dallas),而不仅仅是Dallas。我的代码有问题吗?

谢谢

3 个答案:

答案 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)
相关问题