Вот что я делаю, чтобы отсортировать свой 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?
Как указал @GabeSechan, есть комментарий, что вы не можете правильно сравнивать числа в строковом представлении, с точки зрения производительности лучшим способом будет первоначально хранить временные метки как Long, а затем будет работать компаратор по умолчанию, и будет более эффективно сравнивать Long, а не String.
Если вам нужно самое простое решение, просто используйте it.toLong().
mediumGroups.toSortedMap(if (sortDescending) compareByDescending { it.toLong() } else compareBy { it.toLong() })
Напишите собственный компаратор вместо сортировки по убыванию. Но с точки зрения производительности - чтобы получить то, что вы хотите, вам все равно придется преобразовывать эти строки в целые во время выполнения с высокой стоимостью и несколько раз, поэтому вам лучше преобразовать их в целые один раз, когда они входят в система. Почему вы когда-либо сохраняли метки даты/времени в виде строк? Они являются целыми по какой-то причине, поэтому вы можете сравнить их, используя < и >