Intereting Posts
Как получить правильный тип при возврате шаблона <T?> Из статической функции с нулевым значением Как упростить несколько проверок равных в условии if? Ошибка: (2, 0) Не удалось найти метод 'org.gradle.api.internal.file.DefaultSourceDirectorySet Открытые поля для совместимости с Java Переопределение одной и той же подписи из разных закладок Как отфильтровать список на месте с Kotlin? Как я могу завершить свой конструктор? Fatal Exception: java.lang.RuntimeException с библиотекой Klaxon json Kotlin Нужно ли использовать @Repository, когда я использую только JdbcTemplate в своем классе DAO? Kotlin: For-loop должен иметь метод итератора – это ошибка? Передача собственности другому имуществу Android Как установить множественные значения гравитации программно в Котлин? IntelliJ: ошибка Kotlin вызывает мерцание мыши и ошибки в коде Как сделать первичный ключ как автоинкремент для Room Persistence lib Как ссылаться на конструктор запечатанного в Котлин?

RxJava2 Может быть возвращено пустое Наблюдаемое, если ни один элемент

Есть ли лучший / более идиоматический способ использования типа Maybe из JavaRx 2, чем flatMap и try/catch ? В следующем примере выберете Maybe<User> и попробуем заказать им случайный билет для полета. Если пользователь не существует, верните пустой Observable .

 fun bookRandomTicketFor(userId: UUID): Observable<Ticket> { val agencies = travelAgents() // Observable<TravelAgency> val user = findById(userId) // Maybe<User> val location = locate() // Observable<GeoLocation> return Observable .just(user.toObservable()) .flatMap { usr -> try { usr.zipWith(location, { aUser, location -> agencies .flatMap { agency -> agency .search(aUser, location) // Observable<Flight>. .toList() // Convert to List<Flight>. .toObservable() // And to Observable<List<Flight>>. .flatMap { flights -> // So it can be shuffled, Observable.just( // giving a random order. shuffle(flights as MutableList<Flight>)[0] ) } }.firstElement() // Now take the first randomly shuffled Flight. }).flatMap { flight -> book(user.toObservable(), flight.toObservable()) } } catch (ex: Exception) { Observable.empty<Ticket>() } } .doOnSubscribe { Logger.log("Random ticket: start for $userId") } .doOnComplete { Logger.log("Random ticket: exit for $userId") } } 

Похоже, что вам нужно преобразовать Maybe<User> в Observable и начать с Observable<Observable<User>> который я смогу затем flatMap и try/catch . Просто интересно, есть ли более аккуратный подход к этому?

Solutions Collecting From Web of "RxJava2 Может быть возвращено пустое Наблюдаемое, если ни один элемент"