Лучший подход к группировке и сортировке одного списка в 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))

Мой класс перечисления 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 31.05.2019 07:00

Да! но сохраняя алфавитный порядок @Amit

sagar suri 31.05.2019 07:04
1
2
1 170
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если у тебя есть

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 }
    )
)

Потрясающий! Я никогда не мог представить себе это решение.

sagar suri 31.05.2019 16:19

можете немного объяснить, как это работает compareBy

sagar suri 01.06.2019 16:36

Как я могу обрабатывать такие случаи, как если Item("", Severity.CRITICAL) не имеет местоположения. Я хочу поставить их наконец.

sagar suri 03.06.2019 06:21

Что означает, что элемент не имеет страны, но имеет серьезность? Может у вас проблемы с дизайном?

Algar 03.06.2019 16:27

Откровенно говоря, в классе Item гораздо больше свойств. Но для простоты я не стал писать их все. Так что некоторые детали могут оказаться пустыми, и я хочу поставить их в конец.

sagar suri 04.06.2019 06:16

О, я вижу! Может быть, я смогу взглянуть на него позже, я сейчас очень занят. Но мне интересно, лучше ли позволить стране быть обнуляемой, чем сделать ее пустой строкой.

Algar 04.06.2019 10:18

Другие вопросы по теме