2016-10-11 3 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'というキータイプを簡単に見つけることができます。地図キーとしてGStringを使用している場合は停止します。 Googleには、なぜ彼らが問題なのか、といった多くの議論がありました。 http://www.groovy-lang.org/mailing-lists.html#nabble-td4511883 –

答えて

1

Grailsでは、idLongなので、StringIntegerのキーは見つかりません。

このコードは動作します:

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

うん、そうだった。ありがとう。 – user1023110

0

よくわかりませんが、私がGroovy Webコンソールで同様に試してみたところ、正常に動作しました。以下に添付を参照してください:

Similar code

したがって、私にはそれはGrailsのか、何か間違ったことをやっているのどちらかに何かのように見えます。 もう一度試して間違いがないかどうかを確認してください。

関連する問題