[英]How to subscribe multiple Observers on a single Observable with RxJava?
I have an Observable<List<Event>>
and I want this Observable to be shared by multiple Subscribers.我有一个Observable<List<Event>>
并且我希望这个 Observable 被多个订阅者共享。 Each Subscriber will filter each Event and process it.每个订阅者将过滤每个事件并对其进行处理。
The Observable<List<Event>>
has been created this way: Observable<List<Event>>
是这样创建的:
@Override
public List<Event> findNewEvents() {
List<Event> results = new ArrayList<>();
while(! fetchedEvents.isEmpty()) {
results.add(fetchedEvents.poll());
}
return results;
}
@Override
public Observable<List<Event>> findNewObservableEvents() {
return Observable.just(findNewEvents());
}
Here is the code:这是代码:
Observable<List<Event>> newEvents = reader.findNewObservableEvents();
Disposable riskApproveRiskEventsDisposable = newEvents.flatMapIterable(riskEvents -> riskEvents)
.flatMap(Observable::just)
.filter(risk::isForRiskApproval)
.subscribe(risk::approveRisk);
Disposable fundingCheckFundabilityEventsDisposable = newEvents.flatMapIterable(riskEvents -> riskEvents)
.flatMap(Observable::just)
.filter(funding::isForFundingFundabilityCheck)
.subscribe(funding::checkFundability);
Disposable fundingFundEventsDisposable = newEvents.flatMapIterable(riskEvents -> riskEvents)
.flatMap(Observable::just)
.filter(funding::isForFundingFund)
.subscribe(funding::fund);
I have tried:我努力了:
newEvents.share()
and also newEvents.publish()
. newEvents.share()
和newEvents.publish()
。
When trying: newEvents.create()
I need to supply a ObservableOnSubscribe
object, but I don't understand how to obtain it.尝试时: newEvents.create()
我需要提供ObservableOnSubscribe
object,但我不明白如何获取它。
What is the trick?诀窍是什么?
If you don't want to consume findNewObservableEvents
multiple times then use publish
and once the subscribers have subscribed, call connect
on the ConnectableObservable
:如果您不想多次使用findNewObservableEvents
,请使用publish
,一旦订阅者订阅,请在ConnectableObservable
上调用connect
:
ConnectableObservable<List<Event>> newEvents = reader.findNewObservableEvents().publish();
Disposable riskApproveRiskEventsDisposable =
newEvents.flatMapIterable(riskEvents -> riskEvents)
.flatMap(Observable::just)
.filter(risk::isForRiskApproval)
.subscribe(risk::approveRisk);
Disposable fundingCheckFundabilityEventsDisposable =
newEvents.flatMapIterable(riskEvents -> riskEvents)
.flatMap(Observable::just)
.filter(funding::isForFundingFundabilityCheck)
.subscribe(funding::checkFundability);
Disposable fundingFundEventsDisposable =
newEvents.flatMapIterable(riskEvents -> riskEvents)
.flatMap(Observable::just)
.filter(funding::isForFundingFund)
.subscribe(funding::fund);
Disposable connection = newEvents.connect();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.