Groovy:如何检查给定的String是否是Map的键?

时间:2016-08-02 16:19:46

标签: groovy hashmap

我正在从一个文件中读到这样的地图......

 def inputFile = new File("/Users/joe/Desktop/teamManagers.txt");
 def teams = [:]

inputFile.eachLine { rawLine ->
 def line = rawLine.split('\t')

 String team = line[0].toString()
 def manager = line[1]
 teams.put(team, manager)

 println ("${team} has hash code ${team.hashCode()}")

}

我在地图中提出的一个值是" Yankees"。所以最后一行打印出来

 "Yankees" has hash code -1687935690

但是现在如果我想检查这个String是否在Map中,它似乎有一个不同的哈希码。例如,此代码..

 println "Yankees".hashCode();

打印出265351886.正如您所看到的,这与从文件中拉出时相同String的哈希码不同。

为什么这样做?难道两个相等的字符串不应该具有相同的哈希码吗?

如何检查给定字符串是否在Map中?

1 个答案:

答案 0 :(得分:1)

显然,你的文件中有洋基队的引号(也见于你的输出中)

对我来说,这段代码:

def team ='"Yankees"'
println ("${team} has hash code ${team.hashCode()}")
println "Yankees".hashCode()​

给出了这个输出:

"Yankees" has hash code -1687935690
265351886

这与您的结果一致。

然而

def team ='"Yankees"'
println ("${team} has hash code ${team.hashCode()}")
println '"Yankees"'.hashCode()​

给出相同的哈希值。那么你的问题就是

编辑: 你还问过如何判断一个键是否在地图中。例如,你可以if(map["Im a key!"])