2016-10-11 57 views
0

在下面的代码中发生了一些奇怪的事情。我成功地创建了一个映射,如输出中所示,我有键和值,但无法使用键检索值。Groovy Grails - 通过键从地图检索值的问题

见代码及以下的输出:

class HomeController { 

def index() { 
    List gs=Gizmo.getAll() 
    def gizmoList= gs.collectEntries { 
     [(it.id): (it.name)] 
    } 


    println "item 2 is ${gizmoList['2']}" 

    println "item 2 is ${gizmoList[2]}" 
    println "keyset is " + gizmoList.keySet().toList().toString() 
    println "values are" + gizmoList.values().toList().toString() 
    [myList: gizmoList ] 
} 
} 

控制台输出为:

item 2 is null 
item 2 is null 
keyset is [1, 2, 3] 
values are[flange, nork, prule] 

不知怎的,我想也许键GStringImpl什么的,但我认为把括号周围会强制为普通字符串。

+0

'Gizmo'是域类,对吧? –

+0

查找关键字类型很简单 - 'println gizmoList.keySet()*。getClass()*。name'。如果您使用GStrings作为地图键停止。谷歌它已经有很多关于他们为什么会成为问题的讨论,例如http://www.groovy-lang.org/mailing-lists.html#nabble-td4511883 –

回答

1

在Grails中,id的是Long,所以找不到您的StringInteger键。

这个片段的工作:

assert "item 2 is ${gizmoList[2l]}" == "item 2 is nork" 
+0

是的,就是这样。谢谢。 – user1023110

0

嗯不知道,但当我在Groovy Web控制台上尝试类似时,它工作正常。见后附:

Similar code

因此,对我来说,它看起来像什么毛病或者Grails的,或者你正在做的事情是错误的。 请再试一次,并检查是否有任何可能的错误。