Hi I have the following map called allLang[:] when I print out all the contents of the map using println allLang I get the following output:
[1:[en, de], 2:[en, de], 3:[en, de], 4:[en, de], 5:[en, de], 6:[en, de], 7:[en,
de], 8:[en], 9:[en], 10:[en, de], 11:[en, de], 12:[en, de], 13:[en, de], 14:[en,
de], 15:[en], 16:[en], 17:[en], 18:[en], 19:[en], 27:[de], 33:[de], 34:[de], 35
:[de], 36:[de]]
however when I try to print out the value attached to a specific key for example:
println allLang[2]
the output is null. I tried to access that value in multiple ways:
println allLang[ 2 ]
println allLang.get(2)
println allLang.get( 2 )
and neither of these work, I still get null.
How do you define the array? Could it be that the index is not 2 but 2 (or some other non printable character)?
the easiest way to find out is to...
- println allLang.inspect()
this will give you a better output:
def allLang = [1:[ en , de ], 2 :[ en , de ],3:[ en , de ]]
println allLang.inspect()
=> [1:["en", "de"], "2":["en", "de"], 3:["en", "de"]]
- or you can iterate through the map and examine the keys:
allLang.each {key, value ->
println key.dump()
}
=> <java.lang.Integer@1 value=1>
=> <java.lang.String@32 value=2 offset=0 count=1 hash=50>
=> <java.lang.Integer@3 value=3>
this should help you to find the right index....
Update: got it! The following code reproduces your problem:
def allLang = [:]
def codes = [ en , de ]
def query = [0:[id:0l],1:[id:1l],2:[id:2l],3:[id:3l],4:[id:4l]];
for(def i = 0; i < query.size(); i++){
allLang[(query[i].id)] = codes;
}
println allLang
println allLang[2]
println allLang[ 2 ]
The solution is, that the ´idused by hibernate is aLong`. So you have to access your map through long values:
println allLang[2l]
the best solution to avoid your problem is to avoid numerical indices:
allLang[ +(query[i].id)] = codes;
will let you access your map through
println allLang[ 2 ]