从未完成(从未完成可观察的)observable中检索最后的项目

时间:2015-05-06 10:24:27

标签: rx-java

所以,我有一个基于UI交互提供params的Observable。我希望提取最后提供的params来自observable。是否有一种简洁的方法可以做到这一点,观察者永远不会结束(至少在它有订阅者之前)?

我尝试了不同的东西导致执行阻塞并等待Observable完成(这不会发生)。

考虑一下:

Integer last = Observable.create(new Observable.OnSubscribe<Integer>() {
    @Override
    public void call(Subscriber<? super Integer> subscriber) {
        subscriber.onNext(1);
        subscriber.onNext(2);
        subscriber.onNext(3);
    }
}).toBlocking().last();

1 个答案:

答案 0 :(得分:1)

BehaviorSubject正是您要找的。以下是用法示例:

private final BehaviorSubject<Integer> subject = BehaviorSubject.create(0);

private Observable<Integer> getUiElementValueAsObservable() {
    return subject;
}

private void notifyUiElementValueChanged(final Integer value) {
    subject.onNext(value);
}

private void performActionWithLastUiElementValue() {
    getUiElementValueAsObservable().first().subscribe(new Action1<Integer>() {
        @Override
        public void call(final Integer integer) {
            System.out.println("Current value " + integer);
        }
    });
}

private void run() {
    // prints "Current value 0"
    performActionWithLastUiElementValue();

    notifyUiElementValueChanged(1);
    notifyUiElementValueChanged(2);
    notifyUiElementValueChanged(3);

    // prints "Current value 3"
    performActionWithLastUiElementValue();
}