如何用RxKotlin将两个字符串列表按索引匹配转为自定义对象列表
RxKotlin实现方案
核心使用Rx标准zip操作符完成按索引配对合并,完整可运行代码如下:
import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.kotlin.subscribeBy // 已定义的业务数据类 data class Names( var name: String, var lastName: String ) fun main() { val nameList = arrayListOf("name1","name2","name3") val lastNameList = arrayListOf("lastName1","lastName2","lastName3") // 核心处理逻辑 Observable.zip( // 把两个列表分别转为Observable对象 Observable.fromIterable(nameList), Observable.fromIterable(lastNameList) ) { name, lastName -> // 配对后的元素直接封装为Names对象 Names(name, lastName) } .toList() // 把逐个发射的Names对象转为单个列表事件 .subscribeBy( onSuccess = { resultList -> // resultList就是你需要的最终输出格式 println(resultList) }, onError = { error -> error.printStackTrace() } ) }
运行后输出结果和要求完全一致:
[Names(name=name1, lastName=lastName1), Names(name=name2, lastName=lastName2), Names(name=name3, lastName=lastName3)]
逻辑说明
zip操作符的特性就是严格按照元素发射顺序(也就是原列表的索引顺序)对多个Observable的元素做一一配对,正好匹配按相同索引合并的需求- 如果两个输入列表长度不一致,
zip会自动以较短的列表长度为准,忽略长列表中多余的元素,符合常规索引配对的处理逻辑 - 如果你使用的是RxJava2版本,仅需要调整对应的导入包路径,核心的
zip+fromIterable逻辑完全通用
内容的提问来源于stack exchange,提问作者RSCode
相关产品推荐
相关产品推荐

