我有两个可观察对象,一个可以非常快速地发出事件。我需要同步它们,例如当observable1发出时,我从observable2中获取最后一个,并做一些事情。我该怎么做:
Observable<PairingState> pairingState = CoroutinesHelperKt.toObservable(mManager.getPairingStatusFlow())
.filter(state -> state == PairingState.Paired);
Observable<...> added = mCallbackManager.getSomeObservable("...")
.filter(participant -> !participant.participant.getId().equals(mUserManager.getUserId()));
mStateSubscription = Observable.zip(pairingState, added, (state, user) -> true)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.delay(MESSAGE_SEND_DELAY, TimeUnit.MILLISECONDS)
.subscribe(event -> {
//do some stuff
});
问题:如何仅从observable2中获取最后一个?
[我试图解决当2发出100个元素,而我只有一个来自observable1的问题
我想应该使用.combineLatest。它将是:
mStateSubscription = Observable.combineLatest(pairingState, added, (state, user) -> true)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.delay(MESSAGE_SEND_DELAY, TimeUnit.MILLISECONDS)
.subscribe(event -> {
//do some stuff
});
虽然可能需要combineLatest
,但您也应该查看withLatestFrom
。
withLatestFrom
:当可观察到的1发出时,使用可观察到的2中的最新值。当可观察到的2发出时,使用可观察到的1中的最新值。