Преобразование данных с RxJava в Котлине

Я использую Kotlin, и у меня есть модель Observable<List<FlickPhoto>> . Каждый FlickrPhoto содержит список, и каждая модель Photos содержит List<Photo> .

Я хочу преобразовать List<FlickrPhoto> в List<PhotoEntity> , который является в основном другой моделью с меньшим количеством данных и переносит ее в Observable (чтобы, наконец, получить Observable<List<PhotoEntity>> ).

Как я могу сделать это в лучшем стиле RxJava? Я создал класс PhotoEntityMapper со следующим методом, который, я уверен, может быть правильно использован для этой цели: override fun transform(photoCollection: List<Photo>): List<PhotoEntity>

Заранее спасибо!

Решение в вашем комментарии работает:

 // original remoteDataSource .getPhotos(photoTag) .flatMap({ t: FlickrPhoto -> Observable .just(serviceMapper.transform(t.photos.photo)) // <-- not lazy }) 

Здесь у вас есть несколько разные варианты:

 // v1 remoteDataSource .getPhotos(photoTag) .flatMap { Observable .just(it.photos.photo) .map { serviceMapper.transform(it) } // <-- lazy transformation } // v2 remoteDataSource .getPhotos(photoTag) .flatMapIterable { it } .map { serviceMapper.transform(it.photos.photo) } 

Ни один вариант не намного лучше, чем другие. Обычно я бы пошел с v2 потому что он короче.

Но я не знаю, что делает serviceMapper . Например, если это связано с сетью, и я хотел выполнить ее в другом Scheduler , то v1 хорошо, потому что вы можете подписаться на преобразования в другом потоке (чего вы не можете сделать в исходной версии, потому что преобразование предварительно вычисляется равномерно) , Пример:

 // v1 - with scheduler remoteDataSource .getPhotos(photoTag) .flatMap { Observable .just(it.photos.photo) .map { serviceMapper.transform(it) } // <-- lazy transformation .subscribeOn(Schedulers.io()) // <-- schedule on io() }