简体   繁体   English

可观察列表在Kotlin中合并为单个可观察列表

[英]Observable Lists merge to a single observable List in Kotlin

I am building an Android app which gathering data with a specific argument. 我正在构建一个Android应用程序,该程序使用特定的参数收集数据。 The app is developed in Java/Kotlin and based on RxJava. 该应用程序是使用RxJava在Java / Kotlin中开发的。

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())

}

I want to return an Observable<List<Car>> . 我想返回一个Observable<List<Car>> Any call to getCar is returning an Observable<List<Car>> . getCar任何调用都将返回Observable<List<Car>> By default, I have an issue because I am returning an Observable<List<Observable<List<Car>>> because I need to extract the data first to merge everything. 默认情况下,我有一个问题,因为我要返回Observable<List<Observable<List<Car>>>因为我需要先提取数据以合并所有内容。

Any idea, how to make it works? 任何想法,如何使其起作用? the code above is not working, because it's complaining about type issue and I assume it's linked to the mix of Observable. 上面的代码无法正常工作,因为它抱怨类型问题,并且我认为它与Observable混合在一起。

Thanks for your help. 谢谢你的帮助。

If you want to return an Observable that will emit these 3 lists in sequence, you can use Observable.merge or Observable.concat depending on whether you want to preserve their order: 如果要返回一个将按顺序发出这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()
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM