更改 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);