Intereting Posts
Spring Boot сериализует текст / javascript для JSON Котлинское отношение реляционного равенства на Int со значениями от -128 до 127 Возможно ли пересечение в Котлин? Добавление «предоставленной» конфигурации в библиотеку kotlin / java с использованием gradle почему обработчик исключений coroutine удваивает исходное исключение? Заголовки HTTP не возвращаются на EC2 Использование отражения для передачи и изменения примитива без использования массива Запечатанный класс данных в Котлине Вызов RxJava Single In Kotlin Lambda Только последний элемент добавлен в RecyclerView в Android (Kotlin) Гик-инъекция: разница между getBinding / getExistingBinding / getProvider и getInstance Kotlin, когда несколько значений не работают, когда значение представляет собой вид android Как скомпилировать тестовый код модуля Kotlin, который использует hamcrest 'is' Установка текста в EditText Kotlin, Android Android – Как запустить пользовательскую функцию DialogPreference из MainActivity?

Сортировка объектов по алфавиту

У меня возникает проблема при сортировке списка «Маршрутов» для моего приложения, независимо от того, что я пытаюсь, я не могу получить сортировку, которую я ищу.

Я хочу, чтобы он отсортировался на 1,2,3,4,5 и т. Д., Но когда я сортирую, я получаю 1,11,12,2,20 и так далее.

Моя модель маршрута

public open class Route(docValue:Map<String,Any>) { val route_id = (docValue["route_id"] as Number).toInt() val short_name = docValue["route_short_name"] as String val color = readColorMoreSafely(docValue, "route_color", Color.BLUE) val long_name = docValue["route_long_name"] as String } 

Код, используемый для сортировки

 if(cityId != null && view != null) { val routesList = view.findViewById(R.id.routesList) as ListView val cache = TransitCache.getInstance(applicationContext, cityId, true) val routes = cache.getRoutes() .observeOn(AndroidSchedulers.mainThread()) .doOnNext { val noRoutesMessage = view.findViewById(R.id.list_routes_no_routes_visible) as TextView noRoutesMessage.visibility = if(it.size == 0) View.VISIBLE else View.GONE } routes.toSortedList() listAdapter = RxListAdapter(applicationContext, R.layout.activity_list_routes_row, routes) routesList.adapter = listAdapter 

Но все равно ничего, я просто хочу сортировать маршруты «route_id», я пробовал несколько разных вещей, последний из которых был

 routes.toSortedList() 

которая до сих пор закончилась тем, что я не делала то, что хотела, в этот момент я застрял.

Solutions Collecting From Web of "Сортировка объектов по алфавиту"

 val routes = cache.getRoutes() .observeOn(AndroidSchedulers.mainThread()) 

Этот код говорит мне, что вы имеете дело с RxJava, для чего требуется совершенно другое решение, поэтому в будущем важно включить этот тип информации.

Если cache.getRoutes() возвращает Observable<List<Route>> то этот маршрут может быть отсортирован с кодом

 .map { it.sortedBy(Route::route_id) } 

Это создаст новый внутренний список, отсортированный по числовому значению route_id .

Если cache.getRoutes() возвращает Observable<Route> тогда вам нужно включить дополнительный вызов в .toList() чтобы превратить его в Observable<List<Route>> .

Если routes являются MutableList и вы хотите отсортировать их на месте, вы можете использовать sortBy :

 routes.sortBy(Route::route_id) 

В противном случае вы можете использовать sortedBy для создания нового списка с отсортированными элементами:

 val sortedRoutes = routes.sortedBy(Route::route_id) 

Это можно сделать, используя лямбда-эспрессы.

 route.Sort((x, y) => Int32.Parse(x.Number).CompareTo(Int32.Parse(y.Number)));