No se puede comprimir Rxjava Observables

Estoy usando RxJava 2. * y quiero fusionar los resultados de dos observables (uno de la modificación y otro de la habitación) utilizando el operador zip (no dude en sugerir mejor).

Los objects model que provienen del server remoto son diferentes de los que salen de la Base de datos de salas.

  1. Quiero asignar los objects del control remoto al de local
  2. Combina esos dos resultados
  3. Mostrar el resultado

Mi API remota se ve así:

interface CategoryService{ @GET("categories") fun getCategories(): Observable<List<Category>> 

}

Y la consulta de mi sala DAO se ve así:

 @Query("SELECT * FROM categories ORDER BY id") abstract fun categories(): Observable<List<KmagCategory>> 

He convertido Observable> en Observable> así:

 val newCategoryList : Observable<List<KmagCategory>> =settingService.getCategories().flatMap { list -> Observable.fromIterable(list) .map { item -> KmagCategory(item.id, item.title, item.slug, item.isFav) } .toList() .toObservable() } 

Pero cuando bash comprimir estos dos observables de esta manera:

 val combinedObservable : Observable<List<KmagCategory>> = Observables.zip(KMagApp.database?.categories()?.categories()!!,newSetting) 

Obtengo una inferencia de tipo fallida, un tipo de error esperado enter image description here

    El error en realidad te dice que puedes comprimirlos y esto produce Observable<Pair<...>> . El problema es que asigna el resultado a un tipo incorrecto. Esto es como decir "No puedo agregar Int s" en val x: String = 1 + 2 : por supuesto que puedes, pero el resultado no es una String .

    Necesita usar zipWith y especificar cómo fusionar los valores.

    Había hecho tres errores:

    1. Usado Observables.zip () en lugar de Observable.zip ()

    2. No dije cómo comprimirlos.

    3. La habitación DAO no comprende Observable, por lo tanto, use Flowable.

    Así que para comprimir esos dos observables que hice:

     val combinedObservable = Observable .zip(KMagApp.database?.categories()?.categories()?.toObservable(), newSetting, BiFunction<List<KmagCategory>, List<KmagCategory>, List<KmagCategory>> { s1, s2 -> getCombinedList(s1, s2) })