我的代码如下
import scala.collection.mutable.HashMap
type CrossingInterval = (Date, Date)
val crossingMap = new HashMap[String, CrossingInterval]
val crossingData: String = ...首先,为什么要编译下面这行代码?
val time = crossingMap.getOrElse(crossingData, -1)我会认为-1是一个无效值。
其次,我如何进行如下的基本检查
if (value exists in map) {
}
else {
}在Java中,我只检查null值。我不确定在Scala中做这件事的正确方式
发布于 2011-08-13 08:09:48
在解释器中键入代码会显示编译第一条语句的原因:
type Date = String
scala> val time = crossingMap.getOrElse(crossingData, -1)
time: Any = -1基本上,Map[A, B]上的getOrElse (这里是B = CrossingDate)接受任何类型B1 >: B的参数:这意味着B1必须是B的超类型。这里是B1 = Any,-1当然是Any类型的有效值。在本例中,您实际上希望有一个time的类型声明。
要测试某个键是否属于map,只需调用contains方法。下面是一个例子-由于Date不可用,我简单地将其定义为String的别名。
scala> crossingMap.contains(crossingData)
res13: Boolean = false
scala> crossingMap += "" -> ("", "")
res14: crossingMap.type = Map("" -> ("",""))
//Now "" is a map of the key
scala> crossingMap.contains("")
res15: Boolean = true如果您想检查某个值是否为映射的一部分,最简单的方法是编写以下代码:
crossingMap.values.toSet.contains("")但是,这会构建一个包含所有值的Set。编辑:你可以在Kipton Barros评论中找到这个子问题的更好的解决方案。
https://stackoverflow.com/questions/7047508
复制相似问题