#android #kotlin #system.reactive
#Android #kotlin #system.reactive
Вопрос:
Я пытаюсь заполнить список подробной информацией об аэропорту. Во-первых, я получаю список аэропортов, которые выполняют определенное условие, и получаю подробную информацию о каждом элементе, который есть в списке. И, наконец, я возвращаю заполненный список.
Вот что у меня есть:
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. Удалось ли вам в конце концов заставить это работать?
2. @lain Нет, у меня это не сработало. Это не повторение списка. Я не знаю, что я делаю не так. Я изменил его на ваше решение и не сработал.
3. Я сделал правильный ответ. Если у вас возникнут дополнительные проблемы, возможно, вы могли бы предоставить мне исходный код.
Ответ №1:
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()
будет означать, что оно «возвращает единицу, которая выдает один элемент, список, состоящий из всех элементов, отправленных конечным источником ObservableSource».
Комментарии:
1. Это сработало как шарм. Поток выдавал некоторые ошибки, но мне удалось их исправить, и это решение было единственным. Спасибо!