如何在 Rx 链中包含条件



如果满足某个条件,我正在尝试切换到另一个可观察对象。在这里,如果列表为空,我需要使用另一个可观察量:

Observable<List<Something>> obs = service.getObservable();
obs.subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .ifTheListIsEmpty(()-> newObservable) // I need something like this
    .subscribe(subscriber)

我在这个扩展中阅读了switchCase,但我不知道如何使用它......

使用 flatMap:

.flatMap(list ->
     list.isEmpty()
       ? otherObservable
       : Observable.just(list))

尽管@Tassos Bassoukos有一个有效的答案,但另一种方法是:

obs.flatMapIterable(l -> l)
   .switchIfEmpty(otherObservable)

根据您的需要,您可以考虑发出多个SomethingObservable<Something>。它允许您使用 Observable.from(list) 创建obs .你甚至不再需要flatMapIterable了!

它还使使用其他运算符(如map)变得更加容易,因为您不必再对整个列表进行操作。

相关内容

  • 没有找到相关文章

最新更新