RxJava:如何运行两个连续调用:第二个取决于第一个

RxJava:如何运行两个连续调用:第二个取决于第一个,java,rx-java,observable,Java,Rx Java,Observable,我需要创建一个observable,其中2个基于改造的调用块按顺序运行。我知道我可以在一个观察者呼叫中运行第二个改装呼叫,但这将非常混乱。我将我的可观察代码与调用方放在一个单独的类中,它返回一个可观察代码。我希望将第一次调用的结果传递给第二次调用,然后在第二次调用完成后,将一个可观察的传递回调用类。(我使用的是Java 7,而不是Java 8) 公共类GetFollowing{ 公共可观测init(){ 返回可观察的。创建( 新的可观察到的。订阅(){ @凌驾 公共无效呼叫(用户如果该要求可以重

我需要创建一个observable,其中2个基于改造的调用块按顺序运行。我知道我可以在一个观察者呼叫中运行第二个改装呼叫,但这将非常混乱。我将我的可观察代码与调用方放在一个单独的类中,它返回一个可观察代码。我希望将第一次调用的结果传递给第二次调用,然后在第二次调用完成后,将一个可观察的传递回调用类。(我使用的是Java 7,而不是Java 8)

公共类GetFollowing{
公共可观测init(){
返回可观察的。创建(
新的可观察到的。订阅(){
@凌驾

公共无效呼叫(用户如果该要求可以重新表述如下:

  • 您有两个要执行的方法,它们都返回
    Observable
    s
  • 在第一种方法的
    可观察的
    上发出的项目需要在出现时输入第二种方法
  • 第二种方法的输出是一个
    可观察的
    ,它基于对第一种
    可观察的
    项的一些计算
  • RxJava中现成的特性是您的解决方案。下面是一个简单的实现来帮助您

    public static void main(String[] args) {
        Observable<Integer> o1 = Observable.just(1, 2);
        Observable<String> result = o1.flatMap(result1 -> Observable.just("Value is: "+result1));
        result.subscribe(finalResult -> System.out.println("Final result: "+finalResult));
    }
    

    另一方面,如果第二个方法没有返回一个
    可观察的
    ,而是对发出的项执行一些操作,那么您可以使用
    map

    实现相同的操作,请检查这正是您的情况。如果第一个可观察的抛出异常,则不会调用second,因为它会中断流和订阅者的操作s
    onError
    回调将被触发。@Maxim Perfect,正是我想要的。第二个输出值不应该是:1??@AalapPatel你是对的。只是更新了代码以匹配输出。你能建议我吗?你的答案在这里不起作用
    Observable< ArrayList<Media> > test;
    
             Observable.concat(
    
                    Observable.create(
                            new Observable.OnSubscribe< ArrayList<User> >() {
                                @Override
                                public void call(Subscriber<? super  ArrayList<User> > subscriber) {
    
                                }
                            }
                    ),
                     test = Observable.create(
                            new Observable.OnSubscribe< ArrayList<Media> >() {
                                @Override
                                public void call(Subscriber<? super  ArrayList<Media> > subscriber) {
    
                                }
                            }
                    )
    
            );
    
            return test; 
    
    public static void main(String[] args) {
        Observable<Integer> o1 = Observable.just(1, 2);
        Observable<String> result = o1.flatMap(result1 -> Observable.just("Value is: "+result1));
        result.subscribe(finalResult -> System.out.println("Final result: "+finalResult));
    }
    
    Final result: Value is: 1
    Final result: Value is: 2