更改 RxJava2 链中的数据类型
Change Data type in the RxJava2 chain
我是 RxJava2 及其方法的新手。
我需要更改从 Observable 发出的数据类型。
说,我有一个数据 class 如下所示。
data class SomeClass (val type: String)
An API returns ArrayList<SomeClass>
,这在当前使用 RxJava2 和 RxAndroid 的实现上运行良好。
apiService.getPrice(code)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(singleObserver)
我必须 change/transform 来自 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
}
}
}
我正在考虑使用两个不同的 Observable,其中 Observable 数据 #2 基于 Observable 数据 #1 (ArrayList<SomeClass>
) 的响应。但是,我不确定这是否有效。有没有更好或更有效的方法来实现这一点?
尝试 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);
我是 RxJava2 及其方法的新手。 我需要更改从 Observable 发出的数据类型。
说,我有一个数据 class 如下所示。
data class SomeClass (val type: String)
An API returns ArrayList<SomeClass>
,这在当前使用 RxJava2 和 RxAndroid 的实现上运行良好。
apiService.getPrice(code)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(singleObserver)
我必须 change/transform 来自 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
}
}
}
我正在考虑使用两个不同的 Observable,其中 Observable 数据 #2 基于 Observable 数据 #1 (ArrayList<SomeClass>
) 的响应。但是,我不确定这是否有效。有没有更好或更有效的方法来实现这一点?
尝试 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);