groovy - 通过动态键访问 groovy 映射

标签 groovy hashmap

我想要一个如下所示的带有动态键的常规映射,并希望通过动态键获取值。但我无法访问它,它为同一键返回 null。

class AmazonPackage {
    public static String WEIGHT = "WEIGHT"
}

class PackageTests {

   @Test
   void "map should return value by dynamic key" () {
       def map = [ ("${AmazonPackage.WEIGHT}") : 100, "id": "package001"]

       assert map['id'] == "package001"

       //assert map[("${AmazonPackage.WEIGHT}")] == 100
       //assert map."${AmazonPackage.WEIGHT}" == 100

       assert 2 == map.keySet().size()
       assert map."WEIGHT" == 100 //fails
    }

    @Test
    void "map should return value by simple key" () {
        def map = ["w" : 100]
        assert map."w" == 100
    }

}

我得到的失败是,

Assertion failed: 

assert map."WEIGHT" == 100
       |   |        |
       |   null     false
       [WEIGHT:100, id:package001]

最佳答案

不幸的是,您存储的 map 键是 GString,而不是 String。这意味着 map 不认为这些键相等。

如果您想使用字符串值访问您的 map ,您应该将键存储为字符串:

def map = [ ("${AmazonPackage.WEIGHT}".toString()) : 100, "id": "package001"]
assert map."WEIGHT" == 100

关于groovy - 通过动态键访问 groovy 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35283215/

相关文章:

c++ - boost::intrusive::unordered_set 桶中使用的是什么存储策略?

javascript - 如何将Map的条目打印到html文档中

java - 返回作为 HashMap 中的值的 ArrayList 的大小

java - 如何使用两张 map 并制作另一张 map ?

java - Grails 框架方法 addTo 在多次调用时抛出异常

groovy - 如何加入groovy中的 map 列表

grails - Grails发布关联列表中的重复姓氏

java - 一个方法在 JUnit 中生成了预期的结果,但它说它是 null

groovy - 使用 Groovy 特征编写 Geb 页面

java - 是否可能/需要在同一条目上加速 HashMap 操作?