开发者

How do I use Scala Hashmaps and Tuples together correctly?

My code开发者_如何学Go is as follows

import scala.collection.mutable.HashMap
type CrossingInterval = (Date, Date)
val crossingMap = new HashMap[String, CrossingInterval]
val crossingData: String = ...

Firstly why does the following line compile?

val time = crossingMap.getOrElse(crossingData, -1)

I would have thought -1 would have been an invalid value

Secondly how do I do a basic check such as the following

if (value exists in map) {
}
else {
}

In Java I would just check for null values. I'm not sure about the proper way to do it in Scala


Typing your code in the interpreter shows why the first statement compiles:

type Date = String
scala> val time = crossingMap.getOrElse(crossingData, -1)
time: Any = -1

Basically, getOrElse on a Map[A, B] (here B = CrossingDate) accepts a parameter of any type B1 >: B: that means that B1 must be a supertype of B. Here B1 = Any, and -1 is of course a valid value of type Any. In this case you actually want to have a type declaration for time.

For testing whether a key belongs to the map, just call the contains method. An example is below - since Date was not available, I simply defined it as an alias to 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

If you want to check whether a value is part of the map, the simplest way is to write this code:

crossingMap.values.toSet.contains("")

However, this builds a Set containing all values. EDIT: You can find a better solution for this subproblem in Kipton Barros comment.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜