可观察列表合并到Koltin中的单个可观察列表

时间:2018-04-12 01:47:06

标签: android kotlin rx-java

我正在构建一个Android应用程序,它使用特定参数收集数据。该应用程序是用Java / Kotlin开发的,基于RxJava。

class Cars constructor(val carsData: CarsData) {

  fun getCars(): Observable<List<Car>> {
    return listOf(
        carsData.getCar("toyota")
            .flatMap { Observable.from(it)}
            .distinct { it.productId }
            .toSortedList()
          ,
        carsData.getCar("chevrolet")
            .flatMap { Observable.from(it)}
            .distinct { it.productId }
            .toSortedList(),
        carsData.getCar("cadillac")
            .flatMap { Observable.from(it)}
            .distinct { it.productId }
            .toSortedList())

}

我想要返回Observable<List<Car>>。对getCar的任何调用都会返回Observable<List<Car>>。默认情况下,我遇到了一个问题,因为我要返回Observable<List<Observable<List<Car>>>,因为我需要首先提取数据以合并所有内容。

任何想法,如何让它有效?上面的代码不起作用,因为它抱怨类型问题,我认为它与Observable的混合有关。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

如果您想要返回按顺序发出这3个列表的Observable,可以使用Observable.mergeObservable.concat,具体取决于您是否要保留其顺序:

return Observable.merge(
    carsData.getCar("toyota")
            .flatMap { Observable.from(it) }
            .distinct { it.productId }
            .toSortedList(),
    carsData.getCar("chevrolet")
            .flatMap { Observable.from(it) }
            .distinct { it.productId }
            .toSortedList(),
    carsData.getCar("cadillac")
            .flatMap { Observable.from(it) }
            .distinct { it.productId }
            .toSortedList()
)