更改RxJava2链中的数据类型

时间:2019-07-17 11:19:27

标签: android reactive-programming rx-java2 rx-android reactivex

我是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>)的响应。但是,我不确定这是否可行。有更好或有效的方法可以实现这一目标吗?

1 个答案:

答案 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);