0

I just want to grep name key. I do not care how many values I will have later but just want to print value whose keys are just starting with the name. I have tried with regex but it did not work.

def data = [
    name0 : 'Foo Bar',
    name1 : "Mayank",
    name2 : "Mk",
    name3 : "Manu",
    age : 42,
    email : 'zoo@bor.com',
]

println(data)

for (field in data.values()) {
   println(field)
}

Output

[name0:Foo Bar, name1:Mayank, name2:Mk, name3:Manu, age:42, email:zoo@bor.com]
Foo Bar
Mayank
Mk
Manu
42
zoo@bor.com

Expected Output:

Foo Bar
Mayank
Mk
Manu
tim_yates
  • 167,322
  • 27
  • 342
  • 338
Mayank C Koli
  • 21
  • 1
  • 3

2 Answers2

0

You can use:

data.findAll{ key, value -> key.matches(/^name.*/) }.each {println it.value}

or

data.findAll{ key, value -> key.startsWith('name') }.each {println it.value}
ou_ryperd
  • 2,037
  • 2
  • 18
  • 23
  • This will print all values, since your predicate is a noop, the return for the findAll is null from the println. I think this lacks a `}.each{` inbetween – cfrick May 11 '20 at 10:39
0

You mean like

data.findAll { k, v -> k.startsWith 'name' }
    .values()
    .each { println it }

?

tim_yates
  • 167,322
  • 27
  • 342
  • 338