Заполните некоторый список, прежде чем возвращать его с помощью RX - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь заполнить список подробной информацией об аэропорте.Прежде всего, я получаю список аэропортов, которые отвечают определенным условиям, и получаю подробную информацию о каждом элементе, который находится в списке.И, наконец, я возвращаю заполненный список.

Вот что у меня есть:

override fun createObservable(params: String): Flowable<List<AirportsEntity>> {
        val destinationAirports = mutableSetOf<AirportsEntity>()
        return this.searchFlightRepository.getDestinationsByCode(params)
            .flatMap {
                Flowable.fromIterable(it)
            }
            .flatMap {
                this.searchFlightRepository.getAirportByCode(it.destination)
            }
            .flatMap {
                destinationAirports.add(it)
                Flowable.just(destinationAirports.toList())
            }
    }

Приведенный выше код работает просто отлично, но он генерирует наблюдаемый для каждого элемента в списке,Интересно, как изменить его, чтобы сначала заполнить список, а затем вернуть его после завершения процесса извлечения.

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

1 Ответ

1 голос
/ 11 апреля 2019

Нужно ли использовать Flowable?

Что-то вроде этого, вероятно, было бы более подходящим:

    private val destinations = listOf("1", "2", "3", "4")

    fun getAirportDestinations(airportCode: String): Single<List<String>> =
            Observable.just(destinations)
                    .flatMapIterable { it }
                    .flatMapSingle { getAirportByCode(it) }
                    .toList()

    private fun getAirportByCode(destinationCode: String): Single<String> =
            Single.just("ABC1")

"он излучает наблюдаемое на элемент внутри списка" - flatmap будет излучать для каждого элемента.Использование toList() будет означать, что оно " Возвращает Single, который испускает один элемент, список, состоящий из всех элементов, испускаемых конечным источником ObservableSource. "

...