RxJava2如果没有元素,可能返回空Observable
有没有比flatMap
和try/catch
使用JavaRx 2中Maybe
类型的更好/更习惯的方法? 以下示例使用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
,似乎有些flatMap
。 只是想知道是否有一个整洁的方法来做到这一点?