Как использовать sortedWith () в kotlin? - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь отсортировать этот простой список пользователей по «созданному». Что я делаю не так?

val user1 = User("2019-01-01 17:42:34")
val user2 = User("2019-01-02 17:42:34")
val user3 = User("2019-01-03 17:42:34")
val list = listOf(user2, user3, user1)

list.sortedWith(compareBy {
    LocalDateTime.parse(
        it.created,
        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
    )
})

data class User(val created: String = "")

Ответы [ 2 ]

1 голос
/ 01 июля 2019

sortedWith функция возвращает новый список с отсортированными элементами без изменения исходной коллекции. Вы, вероятно, хотите использовать sortWith функцию MutableList, которая сортирует исходную коллекцию.

1 голос
/ 01 июля 2019

Ваш код работает. Проблема в том, что sortedWith возвращает список новый с результатами сортировки! Проверьте документацию:

Возвращает список всех элементов, отсортированных в соответствии с указанным [компаратором]. Сорт стабильный . Это означает, что одинаковые элементы сохраняют свой порядок относительно друг друга после сортировки.

Итак, если вы хотите отсортировать коллекцию, вам нужно использовать MutableList и sortWith:

val list = mutableListOf(User("2019-01-01 17:42:34"), User("2019-01-02 17:42:34"), User("2019-01-03 17:42:34"))
list.sortWith(compareBy {
    LocalDateTime.parse(
            it.created,
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...