如何仅使用RxJava中zip的最后一个值?

问题描述 投票:0回答:2

我有两个可观察对象,一个可以非常快速地发出事件。我需要同步它们,例如当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的问题

rx-java rx-java2
2个回答
3
投票

我想应该使用.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
            });

2
投票

虽然可能需要combineLatest,但您也应该查看withLatestFrom

  • [withLatestFrom:当可观察到的1发出时,使用可观察到的2中的最新值。当可观察到的2发出时,使用可观察到的1中的最新值。
© www.soinside.com 2019 - 2024. All rights reserved.