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

如何检查JSON中字符串type.name是否存在于指定枚举集合中?

问题

我定义了如下Kotlin枚举类:

enum class MimeType(val value: String, val priority: Int) {
    PNG("PNG", 1),
    GZIP("GZIP", 2),
    TEXT("TEXT", 3),
    Unknown("null", Int.MIN_VALUE)
}

并创建了该枚举的集合:

val mimeTypeSet = setOf(MimeType.PNG, MimeType.GZIP)

此外有一个JSON对象,其中包含types数组,数组内每个对象都有"name"标识符:

"documentProfile": {
            "types": [{
                "name": "png",
                "title": "Picture1",
                "description": "Picture of animal",
                "hash": "fedac987343"
            }, {
                "name": "gzip",
                "title": "file1",
                "description": "document of ra",
                "hash": "8a73f43edc"
            }]
        }

我通过如下代码遍历types数组:

documentProfile.types.forEach{ type ->
    type.name // 遍历得到png、gzip等字符串
}

请问如何判断字符串类型的type.name(如"png")是否存在于mimeTypeSet枚举集合中?

解决方案

方法1:预转字符串集合快速判断

先把mimeTypeSet里的枚举值的value转成小写(匹配JSON中name的小写格式),生成一个字符串集合,后续直接用contains判断,效率更高:

// 预先生成小写的允许类型集合
val allowedMimeNames = mimeTypeSet.map { it.value.lowercase() }.toSet()

// 遍历判断
documentProfile.types.forEach { type ->
    val isExists = allowedMimeNames.contains(type.name.lowercase())
    // 这里可根据需求处理判断结果,比如打印或业务逻辑处理
    println("${type.name} 是否在集合中:$isExists")
}

这种方法适合需要多次判断的场景,仅需一次转换,后续判断为O(1)时间复杂度。

方法2:通过枚举匹配判断

直接尝试将type.name转换为枚举实例,再判断是否在mimeTypeSet中,同时处理转换失败的情况:

documentProfile.types.forEach { type ->
    val isExists = runCatching {
        MimeType.valueOf(type.name.uppercase())
    }.getOrElse { MimeType.Unknown } in mimeTypeSet
    
    println("${type.name} 是否在集合中:$isExists")
}

这里用runCatching捕获转换异常,失败时返回Unknown枚举,再判断该实例是否在目标集合内。

方法3:遍历枚举集合匹配

直接遍历mimeTypeSet,逐个匹配枚举value的小写与type.name的小写:

documentProfile.types.forEach { type ->
    val targetName = type.name.lowercase()
    val isExists = mimeTypeSet.any { it.value.lowercase() == targetName }
    
    println("${type.name} 是否在集合中:$isExists")
}

这种方法无需预存集合,但每次判断都要遍历枚举集合,适合集合规模较小的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:33:22