Groovy如何使用正则表达式在地图中查找值

时间:2018-10-30 16:04:48

标签: java groovy

我有一张这样的地图:

map[:]
map['subject'] = 'math'
map['subject'] = 'science'
map['subject'] = 'english'
map['location'] = 'building b'
map['address'] = 'some street'

和一个看起来像这样的正则表达式

def regex =~'math|science'

所以我需要使用正则表达式来查找所有非数学或科学值,并创建一个JSON对象。我已经使用了map.findAll,但是当我这样做时它不起作用:

map.findAll{it.value == regex}

我得到:

[:]

最终结果应该是

map['subject'] = 'english'
map['location'] = 'building b'
map['address'] = 'some street'

1 个答案:

答案 0 :(得分:2)

首先,该行应该不是map[:]

map = [:]

第二,重复定义键在这里没有意义,您只是覆盖了相同的值。看起来您需要多个地图,像这样;

map1 = [subject: 'math', location : 'building z', address: '1 street']
map2 = [subject : 'science', location : 'building y', address : '2  street']
map3 = [subject : 'english', location : 'building b', address : 'some street']

将地图添加到列表中

def maps = [map1, map2, map3]

然后,您可以使用~=将要匹配的文本与正则表达式进行比较:

maps.findAll { it['subject'] =~ '^(math|science)' }

输出是匹配传递给findAll的条件的地图列表:

[[subject:english, location:building b, address:some street]]