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

如何按枚举声明顺序对Kotlin中的ArrayList进行排序?

按枚举声明顺序排序字符串列表的实现方案

要将存储颜色字符串的列表按照ColorsEnum的声明顺序排序,核心思路是利用枚举自带的ordinal属性——这个属性会返回枚举常量的声明顺序索引(从0开始),再结合字符串到枚举的映射来实现高效排序。

实现步骤与代码示例

  1. 构建字符串到枚举的映射表:提前把枚举的rawValue和对应的枚举常量关联起来,避免排序时反复遍历枚举,提升效率。
  2. 以枚举的ordinal为依据排序:用这个映射表快速找到每个字符串对应的枚举,再根据ordinal值对列表排序。

完整代码如下:

enum class ColorsEnum(val rawValue: String) {
    red("Red"),
    orange("Orange"),
    yellow("Yellow"),
    green("Green"),
    blue("Blue")
}

// 提前构建字符串到枚举的映射,全局复用
private val colorStringToEnum = ColorsEnum.values().associateBy { it.rawValue }

fun orderByEnum(): String {
    val selectedColors = arrayListOf("Red", "Yellow", "Orange", "Blue", "Green")
    // 按枚举声明顺序排序
    val sortedColors = selectedColors.sortedBy { colorStringToEnum[it]?.ordinal }
    return sortedColors.joinToString(", ")
    // 返回结果:"Red, Orange, Yellow, Green, Blue"
}

额外处理:未知颜色字符串

如果列表中可能存在不在ColorsEnum中的字符串,可以根据需求调整排序逻辑:

  • 将未知字符串排到最后:
val sortedColors = selectedColors.sortedBy { 
    colorStringToEnum[it]?.ordinal ?: Int.MAX_VALUE 
}
  • 严格校验,抛出异常:
val sortedColors = selectedColors.sortedBy { 
    colorStringToEnum[it]?.ordinal ?: error("Unknown color string: $it") 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:57:47