如何用Groovy获取指定Map中的server1和server2键
Groovy提取指定Map键的实现方案
原始数据结构
输入的是包含单个Map的List:
[{server1={ansible_host=server1}, server2={test=test}}]
核心实现方法
方法1:使用subMap快速提取(推荐)
Groovy的Map原生支持subMap方法,传入需要保留的键名集合即可直接得到目标键值对。因为原始数据是List包裹的Map,先取出List中的第一个元素再操作:
def originalData = [{server1: [ansible_host: 'server1'], server2: [test: 'test']}] // 提取指定键 def result = originalData[0].subMap(['server1', 'server2']) println result // 输出:[server1:[ansible_host:server1], server2:[test:test]]
方法2:手动构建新Map(灵活扩展)
如果需要在提取时做额外校验或处理,可以手动遍历目标键,构建新Map:
def originalData = [{server1: [ansible_host: 'server1'], server2: [test: 'test']}] def keepKeys = ['server1', 'server2'] def result = [:] keepKeys.each { key -> if (originalData[0].containsKey(key)) { result[key] = originalData[0][key] } } println result // 输出结果与方法1一致
处理List含多个Map的场景
如果原始List中有多个Map元素,需要批量提取每个Map的指定键,用collect方法批量处理:
def originalData = [ {server1: [ansible_host: 'server1'], server2: [test: 'test']}, {server1: [ansible_host: 'server1-2'], server2: [test: 'test-2'], extra: '无用数据'} ] def resultList = originalData.collect { map -> map.subMap(['server1', 'server2']) } println resultList // 输出:[[server1:[ansible_host:server1], server2:[test:test]], [server1:[ansible_host:server1-2], server2:[test:test-2]]]
内容的提问来源于stack exchange,提问作者airdata
相关产品推荐
相关产品推荐

