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

Kotlin如何基于公共属性合并多环境Pod版本列表生成指定数据类

实现方案

首先抽离通用的CSV解析逻辑,再基于API名称做跨环境合并,后续新增环境仅需少量改动即可适配:

1. 定义通用解析函数

把所有环境共用的字符串解析逻辑抽成独立函数,输入CSV字符串直接返回API名称-版本号的键值对映射:

/**
 * 解析接口返回的CSV字符串,转换为 API名称 对应 版本号 的Map
 */
fun parsePodVersionMap(csv: String): Map<String, String> {
    return csv.split(",")
        .map { it.substringAfterLast("/") }
        .associate { podStr ->
            // 按第一个冒号拆分,避免版本号里带冒号的异常情况
            val (apiName, version) = podStr.split(":", limit = 2)
            apiName to version
        }
}

2. 解析各环境版本数据

不管新增多少个环境,都只用调用上面的解析函数即可,无重复代码:

// 解析现有环境的版本
val testVersionMap = parsePodVersionMap(execGetPodsOne())
val sitVersionMap = parsePodVersionMap(execGetPodsTwo())
// 后续新增环境仅需加一行,例如UAT环境:val uatVersionMap = parsePodVersionMap(execGetPodsUat())

3. 合并生成目标数据类实例

取所有环境的API名称并集,逐个匹配各环境的版本号生成ImageVersions实例:

// 先定义你的数据类,新增环境时加对应字段即可
data class ImageVersions(
    val apiName: String,
    val testPodVersion: String,
    val sitPodVersion: String,
    // 新增环境时加字段,例如:val uatPodVersion: String
)

// 取所有环境的全部API名称去重,避免某环境缺失API导致漏数据
val allApiNames = (testVersionMap.keys + sitVersionMap.keys).distinct()
// 新增环境时把对应Map的keys也加进去,例如+ uatVersionMap.keys

val resultList: List<ImageVersions> = allApiNames.map { apiName ->
    ImageVersions(
        apiName = apiName,
        testPodVersion = testVersionMap[apiName] ?: "N/A", // 缺失版本默认返回N/A,可按需调整
        sitPodVersion = sitVersionMap[apiName] ?: "N/A",
        // 新增环境时加对应赋值,例如:uatPodVersion = uatVersionMap[apiName] ?: "N/A"
    )
}

可选:更高扩展性的实现

如果不想每次新增环境都修改ImageVersions的结构,可以把版本字段换成环境到版本的映射,后续新增环境完全不用改数据类定义:

data class ImageVersions(
    val apiName: String,
    // key为环境标识,例如test/sit/uat,value为对应版本号
    val envVersions: Map<String, String>
)

// 合并逻辑调整为
val envMap = mapOf(
    "test" to testVersionMap,
    "sit" to sitVersionMap,
    // 新增环境仅需加这一行
)
val allApiNames = envMap.values.flatMap { it.keys }.distinct()
val resultList = allApiNames.map { apiName ->
    ImageVersions(
        apiName = apiName,
        envVersions = envMap.mapValues { (_, versionMap) -> versionMap[apiName] ?: "N/A" }
    )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:07