在 kotlin 中对单个列表进行分组和排序的更好方法

sag*_*uri 1 sorting android kotlin

我有一个由自定义对象组成的列表。我想首先根据字母顺序对列表进行分组,然后根据枚举值对这些组进行排序。让我通过代码向您展示:

我的列表:

val list = listOf(Item("America",Severity.CRITICAL), Item("India", Severity.LOW),Item("Australia", Severity.SEVERE),Item("Indonesia", Severity.CRITICAL), Item("Japan", Severity.SEVERE), Item("Jordan", Severity.CRITICAL))
Run Code Online (Sandbox Code Playgroud)

我的Severity枚举类:

enum class Severity{
 CRITICAL, SEVERE, MODERATE, LOW
}
Run Code Online (Sandbox Code Playgroud)

我的预期输出:

val sortedList = listOf(Item("America",Severity.CRITICAL),Item("Australia", Severity.SEVERE),Item("Indonesia", Severity.CRITICAL),Item("India", Severity.LOW), Item("Jordan", Severity.CRITICAL),Item("Japan", Severity.SEVERE))
Run Code Online (Sandbox Code Playgroud)

如您所见,该列表包含按字母顺序排列的所有项目,并按照 Severity 枚举类进行排序。

我的点子:

我打算在列表中创建列表。这些子列表将按字母顺序保存所有项目的组,稍后我将根据Severity枚举值对子列表的项目进行排序。

我怎样才能做到这一点?

Alg*_*gar 5

如果你有

data class Item(val country: String, val severity: Severity)

enum class Severity(val value: Int) {
    CRITICAL(0), SEVERE(1), MODERATE(2), LOW(3)
}
Run Code Online (Sandbox Code Playgroud)

然后

val actual = list.sortedWith(
    compareBy(
        { it.country.first() },
        { it.severity.value }
    )
)
Run Code Online (Sandbox Code Playgroud)