Сортировка не работает в kotlin с помощью sortedBy (...) - PullRequest
5 голосов
/ 11 июля 2020

Я пытаюсь отсортировать это: listOf("P5","P1","P2","P3","P10") с помощью val list = categoryList.sortedBy { it }, но возвращается следующее: [P1, P10, P2, P3, P5], в соответствии с моими требованиями он должен возвращать [P1, P2, P3, P5, P10], так что я здесь делаю не так?

Ответы [ 3 ]

9 голосов
/ 11 июля 2020

Так как вы сортируете напрямую по строковым значениям, вы получаете этот результат. Вместо этого вы можете отсортировать строки по целой части, как показано ниже:

categoryList.sortedBy { it.substring(1).toInt() }
6 голосов
/ 11 июля 2020

Вы сортируете список String, а не список Integer. Вот почему P10 стоит перед P2. Итак, попробуйте следующий метод сортировки:

 var list: List<String> = mutableListOf("P5","P1","P2","P3","P10")
            .sortedWith(compareBy({ it.length }, { it }))
5 голосов
/ 11 июля 2020

Вы сортируете строки, а не числа, поэтому Kotlin сортирует их в лексикографическом порядке. Вот почему «P10» оценивается как меньшее, чем «P2».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...