首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确使用Scala Hashmap和Tuples?

如何正确使用Scala Hashmap和Tuples?
EN

Stack Overflow用户
提问于 2011-08-13 07:52:22
回答 1查看 1.5K关注 0票数 1

我的代码如下

代码语言:javascript
复制
import scala.collection.mutable.HashMap
type CrossingInterval = (Date, Date)
val crossingMap = new HashMap[String, CrossingInterval]
val crossingData: String = ...

首先,为什么要编译下面这行代码?

代码语言:javascript
复制
val time = crossingMap.getOrElse(crossingData, -1)

我会认为-1是一个无效值。

其次,我如何进行如下的基本检查

代码语言:javascript
复制
if (value exists in map) {
}
else {
}

在Java中,我只检查null值。我不确定在Scala中做这件事的正确方式

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-13 08:09:48

在解释器中键入代码会显示编译第一条语句的原因:

代码语言:javascript
复制
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的别名。

代码语言:javascript
复制
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

如果您想检查某个值是否为映射的一部分,最简单的方法是编写以下代码:

代码语言:javascript
复制
crossingMap.values.toSet.contains("")

但是,这会构建一个包含所有值的Set。编辑:你可以在Kipton Barros评论中找到这个子问题的更好的解决方案。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7047508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档