Сортировка даты LinkedHashMap в миллисекундах в Котлине

Вот что я делаю, чтобы отсортировать свой LinkedHashMap<String,ArrayList<Image>>

val sorted = mediumGroups.toSortedMap(if (sortDescending) compareByDescending { it } else compareBy { it })

Строка в LinkedHashMap — это дата в currentTimeMillis.

у меня проблема, когда дата до 1000000000000

Sat 8 September 2001 21:46:40

эти даты на 1 цифру меньше, поэтому они сортируются сверху.

Есть ли способ правильно отсортировать без необходимости конвертировать мой LinkedHashMap в Int вместо String?

Напишите собственный компаратор вместо сортировки по убыванию. Но с точки зрения производительности - чтобы получить то, что вы хотите, вам все равно придется преобразовывать эти строки в целые во время выполнения с высокой стоимостью и несколько раз, поэтому вам лучше преобразовать их в целые один раз, когда они входят в система. Почему вы когда-либо сохраняли метки даты/времени в виде строк? Они являются целыми по какой-то причине, поэтому вы можете сравнить их, используя < и >

Gabe Sechan 22.01.2019 21:36
1
1
166
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Как указал @GabeSechan, есть комментарий, что вы не можете правильно сравнивать числа в строковом представлении, с точки зрения производительности лучшим способом будет первоначально хранить временные метки как Long, а затем будет работать компаратор по умолчанию, и будет более эффективно сравнивать Long, а не String. Если вам нужно самое простое решение, просто используйте it.toLong().

mediumGroups.toSortedMap(if (sortDescending) compareByDescending { it.toLong() } else compareBy { it.toLong() })

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