获取Observable的最新值并立即发出

E-K*_*ami 14 java reactive-programming rx-java rx-android

我正在尝试获取给定的最新值,Observable并在调用后立即将其发出.以下面的代码为例:

return Observable.just(myObservable.last())
    .flatMap(myObservable1 -> {
        return myObservable1;
    })
    .map(o -> o.x) // Here I want to end up with a T object instead of Observable<T> object
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为通过这样做,flatMap将发射myObservable1,然后必须发射,以达到map.我不知道是否可以做这样的事情.有没有人知道如何实现这一目标?谢谢

Mat*_*Bos 25

last() 方法在这里没有任何帮助,因为它等待Observable终止给你最后发出的项目.

假设您没有对发射的observable进行控制,您可以简单地创建一个BehaviorSubject并将其订阅到发出您想要侦听的数据的observable,然后订阅创建的主题.既然Subject是两者Observable,Subscriber你会得到你想要的.

我认为(现在没有时间检查)您可能必须手动取消订阅原始观察,因为BehaviorSubject一旦所有订阅者取消订阅都不会自动取消订阅.

像这样的东西:

BehaviorSubject subject = new BehaviorSubject();
hotObservable.subscribe(subject);
subject.subscribe(thing -> {
    // Here just after subscribing 
    // you will receive the last emitted item, if there was any.
    // You can also always supply the first item to the behavior subject
});
Run Code Online (Sandbox Code Playgroud)

http://reactivex.io/RxJava/javadoc/rx/subjects/BehaviorSubject.html