我在尝试为我的应用程序排序"路线"列表时遇到了一个问题,无论我尝试什么,我都无法获得我想要的排序。
我希望它排序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()
但最终还是没有达到我想要的效果,在这一点上我陷入了困境。
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)