У меня есть список пользовательских объектов и класс Enum. Я должен отсортировать список на основе свойств перечисления. Например:

Мой список:

val list = listOf(Item(1,Severity.CRITICAL), Item(3, Severity.LOW), Item(2, Severity.SEVERE))

Мой enum класс:

enum class Severity{
 CRITICAL, SEVERE, MODERATE, LOW
}

Мой отсортированный список должен быть:

listOf(Item(1,Severity.CRITICAL), Item(2, Severity.SEVERE), Item(3, Severity.LOW))

Заказ осуществляется в соответствии с заказом в классе enum. Как мне этого добиться?

1
sagar suri 29 Май 2019 в 07:24

2 ответа

Лучший ответ

Используйте функцию sortedBy. Это сделает работу очень легко.

val ans = list.sortedBy { it.severity }
3
Abhay Agarwal 29 Май 2019 в 05:37

Поскольку enum сопоставим, объект enum может быть отсортирован путем извлечения значения enum из объекта и использования compareBy

val sortedList = list.sortedWith(compareBy { it.severity })

Редактировать: если упорядочение элемента является «естественной» частью, рассмотрим реализацию сопоставимого интерфейса, поэтому он будет

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()
0
Thinesh Ganeshalingam 29 Май 2019 в 04:45
56353096