Kotlin сортирует hashmap в порядке убывания - PullRequest
0 голосов
/ 25 июня 2018

У меня есть val myHashMap = HashMap<String, MutableList<TestItem>>(), значение ключа hashmap форматируется в виде строки, например 20-06-2018 как мне отсортировать этот hashMap в порядке убывания?

ожидаемый результат:

22-06-2018 : []
21-06-2018 : []
20-06-2018 : []

Я использую этот код для сортировки, но результат в порядке возрастания:

val sortedMap = myHashMap.toSortedMap(compareBy { it })

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Причина, по которой вы получаете результат в порядке возрастания, заключается в том, что (из представленных вами значений) все даты имеют месяц = ​​6 и год = 2018.
Если есть разные даты, то если вы просто наберете compareByDescending, результат будет неверным.
Рассмотрим эти даты: 21-05-2018, 22-4-2018.
Если вы сортируете по убыванию, вы получите 1-е 22-04-2018!
Что вам нужно сделать, это преобразовать даты в гггг-мм-дд, а затем отсортировать по убыванию:

fun convertDate(d: String): String {
    val array = d.split("-")
    return array[2] + array[1] + array[0]
}

val sortedMap =  myHashMap.toSortedMap(compareByDescending { convertDate(it) })

Еще одна вещь: ваши даты должны иметь 2 цифры для месяца и дня и 4 цифры для года, даты, такие как 2-5-2018, дадут неправильный результат.
Последнее редактирование : нет необходимости в - в конкатенации.

0 голосов
/ 25 июня 2018

Вы можете использовать compareByDescending:

val sortedMap = myHashMap.toSortedMap(compareByDescending { it })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...