Functional programming Rx Android/Java:如何顺序组合两个不同类型的可观察对象

Functional programming Rx Android/Java:如何顺序组合两个不同类型的可观察对象,functional-programming,rx-java,reactive-programming,rx-android,Functional Programming,Rx Java,Reactive Programming,Rx Android,我想在特定的时间延迟后检查用户的状态 我有两个可观察对象: 可观察计时器:在特定延迟后发出事件 可观测计时器=可观测计时器((endTime-startTime),时间单位为秒 可观察的,获取用户的当前状态 可观察状态=getCurrentStatusObservable(id) 我必须按顺序组合这些可观测数据,然后结果应该会发出。 为了实现这一点,我使用了以下方法的zip操作符 return Observable.zip(timer, status, new Func2<Long, Cu

我想在特定的时间延迟后检查用户的状态

我有两个
可观察对象:

  • 可观察计时器:在特定延迟后发出事件

    可观测计时器=可观测计时器((endTime-startTime),时间单位为秒

  • 可观察的
    ,获取用户的当前状态

    可观察状态=getCurrentStatusObservable(id)

  • 我必须按顺序组合这些可观测数据,然后结果应该会发出。 为了实现这一点,我使用了以下方法的zip操作符

    return Observable.zip(timer, status, new Func2<Long, CurrentStatus, CurrentStatus>() {
                @Override
                public Program call(Long aLong, CurrentStatus status) {
                    return program;
                }
            });
    
    返回Observable.zip(计时器、状态、新Func2(){
    @凌驾
    公共程序调用(长期、当前状态){
    返回程序;
    }
    });
    
    但问题是
    状态
    可观察
    计时器
    启动之前执行。因此,
    zip
    操作员正在返回旧的
    状态。但我希望
    状态
    可观察
    定时器
    启动后执行


    如果我使用了错误的运算符,请告诉我。我选中了
    concat
    操作符,但它需要相同类型的
    可观察的

    您可以只使用一个常规的
    平面图

    return timer.flatMap(new Func1<Long, Observable<CurrentStatus>() {
        @Override
        public Observable<CurrentStatus> call(Long aLong) {
            return status;
        }
    });
    

    return timer.flatMap(new func1)我同意你的答案。我试图使用zip运算符来实现这一点,使用flatMap是简单而正确的方法。是否有一种方法可以通过使用除flatMap以外的运算符来完成相同的工作。