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'
解决方案
首先,而不是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]]
推荐阅读
- java - hashMap 为现有键返回零值?
- excel - 使用范围在范围内搜索
- karate - 加特林模拟完成后如何运行空手道特征文件
- html - Django - 图像滚动功能在本地主机上不起作用,但在 127.0.0.1 上完美运行
- flutter - 扑。拖动后抛出小部件
- python-3.x - 为什么moviepy连接函数不能与列表一起使用?
- selenium - driver.close() 将永远挂起
- c# - 尝试连接到“smtp.office365.com”时收到 MailKit.Security.SslHandshakeException
- java - 如何避免相同的对象持久化多次elasticsearch
- excel - 如何将一系列混合的文本和数值转换为单个字符串,其中连续数值相加?