Search code examples
groovygroovy-console

changing map values in groovy doesn't work


I am using Groovy version 2.1.0. I am trying to read values from a map and update another map.

a = ["key1":"" ,"key2":""]
b = ["key1": "10", "key3":"99" ]
for (i in b){
 if( i.key in a)
   a.(i.key) = i.value
}
def key2 = "key2"
a.key2 = "value2"
println a.get("key2")
println "value returned is :" + a.get("key1") + ":"

This results in o/p

value2 value returned is ::

But if the map 'a' doesn't contain empty string as values, then it works fine as expected.

a = ["key1":"7" ,"key2":""]
b = ["key1": "10", "key3":"99" ]
for (i in b){
 if( i.key in a)
   a.(i.key) = i.value
}
a."key2" = "value2"
println a.get("key2")
println "value returned is :" + a.get("key1") + ":"

This results in o/p

value2 value returned is :10:

I want to update the empty map with values, like in the first scenario. Where am I getting it wrong.

Thanks in advance.


Solution

  • You need to change:

    if( i.key in a)
       a.(i.key) = i.value
    

    To:

    if( i.key in a.keySet())
       a.(i.key) = i.value