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

Groovy中检查嵌套数据结构元素及获取key值的报错问题

Groovy检查Record列表key字段的问题解决

问题场景

有一个包含Record对象的列表test_list,每个Record包含key等字段,需要检查列表中是否存在key值为oregon_ht01的元素,并获取对应值。原代码运行时报编译错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
tst.groovy: 1: expecting ')', found 'key' @ line 1, column 133.
   e = 1684410534479, serialized key size =

报错原因

  1. test_list定义语法错误:Record构造参数中存在带空格的名称(如serialized key size),Groovy无法识别这种无引号的空格参数名,导致语法解析失败;同时字符串类型的参数值(如nr-dev-01、oregon_ht01)未加引号,会被当作变量处理,引发额外问题。
  2. 检查逻辑错误:原代码用test_list.contains(keyToFind)判断,但列表元素是Record对象,不是字符串,无法直接匹配。

解决方案

1. 修正test_list的定义

给带空格的参数名加引号,字符串类型的参数值也加上引号:

test_list = [
    Record(
        topic: 'nr-dev-01',
        partition: 0,
        offset: 10,
        "serialized key size": 3,
        "serialized value size": 873,
        headers: RecordHeaders(headers: [], isReadOnly: false),
        key: 'oregon_ht01',
        value: [
            push_status: "SUCCESS",
            push_summary: [
                _index: "date_io_kl",
                _package: "_zip",
                id: "tUz1",
                version: 1,
                found: "true",
                _source: [
                    Manual: [
                        Preamble: [
                            Product_name: ["@value": "Flight manual 101"],
                            Version: ["@value": "1.0.0"],
                            License_info: ["@value": "LICENSED COPY - February 03 2023"]
                        ]
                    ]
                ]
            ]
        ]
    )
]

2. 修正key检查逻辑

遍历列表中的Record对象,检查其key属性是否匹配目标值:

def keyToFind = 'oregon_ht01'

// 检查是否存在匹配的key
def keyExists = test_list.any { record -> record.key == keyToFind }

if (keyExists) {
    println("Key $keyToFind found in messages")
    // 获取匹配的Record及其key值
    def matchedRecord = test_list.find { it.key == keyToFind }
    println("Matched key value: ${matchedRecord.key}")
} else {
    println("Key $keyToFind not found in messages")
}

代码说明

  • any()方法:遍历列表,只要有一个元素满足record.key == keyToFind就返回true,高效完成存在性检查。
  • find()方法:返回第一个匹配条件的Record对象,可用于获取该对象的key值或其他属性。

内容的提问来源于stack exchange,提问作者Rafa S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:53:18