Java 如何在接收链中包含条件?
如果满足某个条件,我试图切换到另一个可观察的。这里,如果列表为空,我需要使用另一个可观察的:Java 如何在接收链中包含条件?,java,rx-java,reactive-programming,Java,Rx Java,Reactive Programming,如果满足某个条件,我试图切换到另一个可观察的。这里,如果列表为空,我需要使用另一个可观察的: Observable<List<Something>> obs = service.getObservable(); obs.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .ifTheListIsEmpty(()-> newObservable) // I ne
Observable<List<Something>> obs = service.getObservable();
obs.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.ifTheListIsEmpty(()-> newObservable) // I need something like this
.subscribe(subscriber)
Observable obs=service.getObservable();
obs.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.IftheListEmpty(()->newObservable)//我需要这样的东西
.订阅(订户)
我在中阅读了有关switchCase的内容,但我不知道如何使用它…使用flatMap:
.flatMap(list ->
list.isEmpty()
? otherObservable
: Observable.just(list))
使用平面图:
.flatMap(list ->
list.isEmpty()
? otherObservable
: Observable.just(list))
尽管@Tassos Bassoukos有一个有效的答案,但另一种方法是:
obs.flatMapIterable(l -> l)
.switchIfEmpty(otherObservable)
根据您的需要,您可以考虑一个<代码>可观察的< /代码>,它发出多个<代码>某物< /代码>。它允许您使用
Observable.from(list)
创建obs
。您甚至不再需要flatMapIterable
它还使使用其他操作符(如
map
)变得更加容易,因为您不再需要对整个列表进行操作。尽管@Tassos Bassoukos有一个有效的答案,但另一种方法是:
obs.flatMapIterable(l -> l)
.switchIfEmpty(otherObservable)
根据您的需要,您可以考虑一个<代码>可观察的< /代码>,它发出多个<代码>某物< /代码>。它允许您使用
Observable.from(list)
创建obs
。您甚至不再需要flatMapIterable
它还使使用其他操作符(如map
)变得更加容易,因为您不再需要对整个列表进行操作