You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:25:00