Happy Ash
Happy Ash

Reputation: 11

Groovy: Dynamically create nested / combine maps in code

I'm trying to dynamically create nested map like below in code.

def people = [
    [name: 'Ash', age: '21', gender: 'm'],
    [name: 'Jo', age: '22', gender: 'f'],
    [name: 'etc.', age: '42', gender: 'f']
]

So I can search it like below

person = people.findAll {item -> 
         item.gender == 'm' &&
         item.age == '21'}                  

My problem is that whilst I can dynamically create one dimensional maps in code, I don't know how to dynamically combine maps in code to create nested map e.g. let's assume in code I have created two maps name1 and name2. How do I add them to people map so they are nested like above example?

def people = [:]
def name1 = [name:'ash', age:'21', gender:'m']
def name2 = [name:'Jo', age:'22', gender:'f']

I've searched / tried so many posts without success. Below is close, but does not work :(

people.put((),(name1))
people.put((),(name2))

Upvotes: 0

Views: 1034

Answers (1)

tim_yates
tim_yates

Reputation: 171084

In your example, people is a list of maps, not a nested map

So you can simply do:

def people = []
def name1 = [name:'ash', age:'21', gender:'m']
def name2 = [name:'Jo', age:'22', gender:'f']

Then:

people += name1
people += name2

Or define it in one line:

def people = [name1, name2]

Upvotes: 1

Related Questions