Android Kotlin 基于RxJava按game_name字段过滤返回数据的实现方法
需求说明
在现有RxJava接口调用链路中完成数据过滤,仅保留条目game_name为「Bắn cá 2021」的内容,避免全量原始数据直接传入View层展示。
实现方案
- 将过滤逻辑从主线程回调移至RxJava链式流中处理,在工作线程完成列表筛选,避免主线程执行无意义的遍历操作
- 引入
map操作符处理接口返回的原始列表,筛选出匹配目标game_name的条目 - 替换原代码中直接对回调值做非空断言的写法,增加空列表兜底,避免空指针崩溃
改造后的代码实现
private fun getItem(){ disposable.add( apiService.getItem() // 工作线程完成过滤,不占用主线程算力 .map { originList -> originList.filter { item -> item.game_name == "Bắn cá 2021" } } .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(object : DisposableSingleObserver<List<ItemModel>>(){ override fun onSuccess(filteredList: List<ItemModel>?) { // 拿到的已是过滤后的数据,无需二次处理 itemData.value = filteredList ?: emptyList() homeLoadError.value = false } override fun onError(e: Throwable?) { homeLoadError.value = true } }) ) }
最终效果
- 原始返回的5条数据中,3条为「Bắn cá 2021」的目标内容,2条为「MÁY BẮN CÁ -SÒNG BẠC」的无关条目
- 过滤完成后,传入
itemData的列表仅保留3条目标条目,无关数据不会进入页面渲染流程 - 所有列表遍历操作均在子线程执行,不会引发主线程卡顿
内容的提问来源于stack exchange,提问作者Gio Dude
相关产品推荐
相关产品推荐

