基于kotlin中的枚举对自定义对象进行排序

时间:2019-05-29 04:24:32

标签: kotlin enums

我有一个自定义对象和一个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类中的顺序进行排序。我该如何实现?

4 个答案:

答案 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 }