如何按枚举声明顺序对Kotlin中的ArrayList进行排序?
按枚举声明顺序排序字符串列表的实现方案
要将存储颜色字符串的列表按照ColorsEnum的声明顺序排序,核心思路是利用枚举自带的ordinal属性——这个属性会返回枚举常量的声明顺序索引(从0开始),再结合字符串到枚举的映射来实现高效排序。
实现步骤与代码示例
- 构建字符串到枚举的映射表:提前把枚举的
rawValue和对应的枚举常量关联起来,避免排序时反复遍历枚举,提升效率。 - 以枚举的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
相关产品推荐
相关产品推荐

