我有一个自定义对象和一个Enum类的列表。我必须根据枚举属性对列表进行排序。例如:
我的列表:
val list = listOf(Item(1,Severity.CRITICAL), Item(3, Severity.LOW), Item(2, Severity.SEVERE))
我的枚举类:
enum class Severity{
CRITICAL, SEVERE, MODERATE, LOW
}
我的排序列表应该是:
listOf(Item(1,Severity.CRITICAL), Item(2, Severity.SEVERE), Item(3, Severity.LOW))
根据enum类中的顺序进行排序。我该如何实现?
答案 0 :(得分:3)
使用sortedBy
函数。它将很容易完成这项工作。
val ans = list.sortedBy { it.severity }
答案 1 :(得分:2)
只需为每个枚举附加一个值。这样你就不用担心枚举类定义中的顺序了。
enum class Severity(val value: Int) {
SEVERE(1),
CRITICAL(0),
MODERATE(2),
LOW(3)
}
然后你可以对列表进行排序:
list.sortedBy { it.serverity.value }
答案 2 :(得分:0)
由于枚举是可比较的,因此可以通过提取枚举值对枚举的对象进行排序 从对象开始,然后使用compareBy
val sortedList = list.sortedWith(compareBy { it.severity })
编辑: 如果项目的订购是其中的“自然”部分,请考虑实现Comparable接口 就像
data class Item(val index: Int, val severity: Severity) : Comparable<Item> {
override fun compareTo(other: Item): Int {
return this.severity.compareTo(other.severity)
}
}
val sortedList= list.sorted()
答案 3 :(得分:0)
很简单。 枚举:
enum class Severity() {
CRITICAL,
SEVERE,
MODERATE,
LOW
}
列表:
val list = listOf(Item(1,Severity.CRITICAL), Item(3, Severity.LOW), Item(2, Severity.SEVERE))
Kotlin ENUM 类有一个内部索引变量 ordinal
。它按照您创建的 ENUM 的顺序从 0 开始设置。
就这样排序:
list.sortedBy { it.severity.ordinal }