我是RxJava2及其方法的新手。 我需要更改从Observable发出的数据类型。
说,我有一个像下面这样的数据类。
data class SomeClass (val type: String)
API返回ArrayList<SomeClass>
,在使用RxJava2和RxAndroid的当前实现中效果很好。
apiService.getPrice(code)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(singleObserver)
我必须更改/转换ArrayList<SomeClass> to HashMap<someClassObject.type, ArrayList<SomeClass>>
中的数据。我正在尝试使操作员实现这一目标,但是没有操作员将允许更改正在观察的数据类型。
基于以下条件进行转换
Consumer<ArrayList<SomeClass>> { response ->
val mapped = HashMap<String, ArrayList<SomeClass>>()
response.forEach { someClassObj ->
val type = someClassObj.type!!
if (mapped.containsKey(type)) {
mapped[district]?.add(someClassObj)
} else {
val list = ArrayList<SomeClass>()
list.add(someClassObj)
mapped[type] = list
}
}
}
我正在考虑使用两个不同的可观察对象,其中可观察数据#2基于可观察数据#1(ArrayList<SomeClass>
)的响应。但是,我不确定这是否可行。有更好或有效的方法可以实现这一目标吗?
答案 0 :(得分:2)
尝试map
:
apiService.getPrice(code)
.map { response ->
val mapped = HashMap<String, ArrayList<SomeClass>>()
response.forEach { someClassObj ->
val type = someClassObj.type!!
if (mapped.containsKey(type)) {
mapped[district]?.add(someClassObj)
} else {
val list = ArrayList<SomeClass>()
list.add(someClassObj)
mapped[type] = list
}
}
mapped
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(singleObserver);