Clasificación de objects alfanuméricamente

Me encuentro con un problema al tratar de orderar una Lista de "Rutas" para mi aplicación, no importa lo que bash, no puedo get la sorting que estoy buscando.

Lo quiero orderado 1,2,3,4,5, etc. pero cuando selecciono, obtengo 1,11,12,2,20 y así sucesivamente.

Mi model de ruta es

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 } 

El código utilizado para orderar es

 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 

Pero todavía nada, solo quiero orderar las routes por "route_id", he intentado algunas cosas diferentes, la última de las cuales fue

 routes.toSortedList() 

que aún no terminaba de hacer lo que quería, en este punto estoy atascado.

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

Este código me dice que está tratando con RxJava, que requiere una solución completamente diferente, por lo que en el futuro es importante include ese tipo de información.

Si cache.getRoutes() devuelve un Observable<List<Route>> entonces esa ruta se puede orderar con el código

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

Esto producirá una nueva list interna orderada por el valor numérico de route_id .

Si cache.getRoutes() devuelve Observable<Route> entonces debe include la llamada adicional a .toList() para convertirla en Observable<List<Route>> .

Si las routes son una MutableList y desea orderarlas in situ, puede usar sortBy :

 routes.sortBy(Route::route_id) 

De lo contrario, puede usar sortedBy para crear una nueva list con los elementos orderados:

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

Esto se puede hacer usando lambda espressions.

 route.Sort((x, y) => Int32.Parse(x.Number).CompareTo(Int32.Parse(y.Number))); 
  • Formulario de inicio de session con request de repetición en rxJava y Retrofit
  • Kotlin cuádruple, quíntuple, etc. para desestructurar
  • Pausa / Reanudar un timer / retraso en RX
  • Manejo de tipo anulable en RxJava con Kotlin
  • Espere hasta que dos observables emitan verdadero
  • Cómo probar el observador?
  • RxKotlin - matriz de observadores dynamics
  • ¿Cómo crear un intervalo infinito observable que emitirá un nuevo object cada intervalo de time?
  • Mockito querido pero no invocado
  • RxJava BehaviorSubject no emite el último elemento?
  • MissingMethodInvocationException probando una class abierta en Kotlin