RxJava - Отображение результата списка в другой список - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу преобразовать каждый объект в моем списке в другой объект. Но при этом мой код застревает при преобразовании их обратно в список

override fun myFunction(): LiveData<MutableList<MyModel>> {
    return mySdk
            .getAllElements() // Returns Flowable<List<CustomObject>>
            .flatMap { Flowable.fromIterable(it) }
            .map {MyModel(it.name!!, it.phoneNumber!!) }
            .toList() //Debugger does not enter here
            .toFlowable()
            .onErrorReturn { Collections.emptyList() }
            .subscribeOn(Schedulers.io())
            .to { LiveDataReactiveStreams.fromPublisher(it) }
}

Все хорошо до картирования. Но отладчик даже не останавливается на toList или любом другом ниже toList. Как я могу решить это?

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Вот мое решение для этого.Спасибо Тиму за то, что он привел меня к правильному ответу.

override fun myFunction(): LiveData<MutableList<MyModel>> {
    return mySdk
            .getAllElements() // Returns Flowable<List<CustomObject>>
            .flatMapSingle { Observable.fromIterable(it).map { MyModel(it.name!!, it.phoneNumber!!) }.toList() }
            .toFlowable()
            .onErrorReturn { Collections.emptyList() }
            .subscribeOn(Schedulers.io())
            .to { LiveDataReactiveStreams.fromPublisher(it) }
}
0 голосов
/ 15 ноября 2018

override fun myFunction(): LiveData<MutableList<MyModel>> { return mySdk .getAllElements() .flatMap {it -> Flowable.fromIterable(it) it.map(MyModel(it.name!!, it.phoneNumber!!) ) } .toFlowable() .onErrorReturn { Collections.emptyList() } .subscribeOn(Schedulers.io()) .to { LiveDataReactiveStreams.fromPublisher(it) } }

0 голосов
/ 15 ноября 2018

Используя flatMap(), вы сведете Flowable списков только к одному Flowable элементов. Для вызова toList() на него требуется Flowable, и, скорее всего, вы никогда не доберетесь до него. Если вы хотите отобразить только элементы в списке и получить элемент с новым списком, вы должны выполнить сопоставление в пределах flatMap() или, возможно, попытаться использовать concatMap(), чтобы сохранить порядок:

...
.concatMapSingle { list ->
    Observable.fromIterable(list).map {
        MyModel(it.name!!, it.phoneNumber!!)
    }.toList()
}
...
...