У меня есть список, состоящий из пользовательских объектов. Я хочу сначала сгруппировать список в алфавитном порядке, а затем отсортировать эти группы на основе значений перечисления. Позвольте мне показать вам код:
Мой список:
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))
Мой класс перечисления Severity
:
enum class Severity{
CRITICAL, SEVERE, MODERATE, LOW
}
Мой ожидаемый результат:
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))
Как видите, в списке все элементы расположены в алфавитном порядке и в соответствии с классом Severity enum.
Моя идея:
Я планирую создавать списки внутри списка. Эти дочерние списки будут содержать группу всех элементов в алфавитном порядке, а позже я отсортирую элементы подсписков на основе значений перечисления Severity
.
Как я могу этого добиться?
Да! но сохраняя алфавитный порядок @Amit
Если у тебя есть
data class Item(val country: String, val severity: Severity)
а также
enum class Severity(val value: Int) {
CRITICAL(0), SEVERE(1), MODERATE(2), LOW(3)
}
тогда
val actual = list.sortedWith(
compareBy(
{ it.country.first() },
{ it.severity.value }
)
)
Потрясающий! Я никогда не мог представить себе это решение.
можете немного объяснить, как это работает compareBy
Как я могу обрабатывать такие случаи, как если Item("", Severity.CRITICAL)
не имеет местоположения. Я хочу поставить их наконец.
Что означает, что элемент не имеет страны, но имеет серьезность? Может у вас проблемы с дизайном?
Откровенно говоря, в классе Item гораздо больше свойств. Но для простоты я не стал писать их все. Так что некоторые детали могут оказаться пустыми, и я хочу поставить их в конец.
О, я вижу! Может быть, я смогу взглянуть на него позже, я сейчас очень занят. Но мне интересно, лучше ли позволить стране быть обнуляемой, чем сделать ее пустой строкой.
Итак, вы сортируете по первое письмо, а затем по серьезности?