RxJava / Android:结合两个依赖的Observable的结果 [英] RxJava/Android: Combine result of two dependent Observables

查看:492
本文介绍了RxJava / Android:结合两个依赖的Observable的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个 Observables


  1. Observable< A> getAObservable()返回 A

  2. Observable< B> getBObservable(A)返回'B'的Observable。

  1. Observable<A> getAObservable() Returns Observable of A
  2. Observable<B> getBObservable(A) Returns Observable of 'B'.

这里 Observable< A> 应在 Observable< B> 之前执行,以便它可以传递其结果 A getBObservable()方法。现在一旦 Observable< B> 完成,我需要结合这些 observable Observable<的结果; AB> 应该返回。

Here Observable<A> should execute before Observable<B> so that it can pass its result A to getBObservable() method. Now once Observable<B> completes I need to combine the result of these observable and Observable<AB> should returns.

选项尝试:


  1. Observable< A> 并在其上应用flatMap,以便转换
    结果 B 。现在,此时我无法访问 A 数据。
    因此我无法返回Observable

  1. Take Observable<A> and apply flatMap on it so that it transform result in B. Now at this point I am not having access to A data. Hence I can't return Observable


  1. 我可以使用 zip 这样,一旦我得到 Observable< A> Observable< B> 的结果,我可以将结果合并到
    AB 。但是在这里我不能设置依赖 Observable< A> 应该在 Observable< B> 之前执行
    和我无法将
    的结果 Observable< A> 传递给 Observable< B>

  1. I can use zip so that once I get the result of both Observable<A> and Observable<B>, I can combine their result to AB. But here I cannot set dependency that Observable<A> should execute before Observable<B> and I can't pass the result of Observable<A> to Observable<B>


代码库:

public class Data {

    A a = new A();
    public Observable<AB> getABContext() {
        A a = new A();

        return getAObservable()
                .flatMap(new Func1<A, Observable<AB>>() {
                    @Override
                    public Observable<AB> call(final A a) {
                        return getBObservable(a)
                                .flatMap(new Func1<B, Observable<AB>>() {
                                    @Override
                                    public Observable<AB> call(B b) {
                                        return Observable.just(new AB(a, b));
                                    }
                                });
                    }
                });
    }

    private Observable<A> getAObservable() {
        return Observable.just(a);
    }

    private Observable<B> getBObservable(A a) {
        return Observable.just(new B(a));
    }

    private static class A {

    }

    private static class B {
        B (A a) {

        }
    }

    private static class AB {
        AB (A a, B b) {

        }
    }

}


推荐答案

请参阅 flatMap 文档。它有重载方法,应用zip函数:

See flatMap documentation. It has overloaded method, that apply zip function:

    Observable<Pair<A, B>> abObservable = getAObservable()
      .flatMap(
        new Func1<A, Observable<? extends B>>() {
            @Override
            public Observable<? extends B> call(A a) {
                return getBObservable(a);
            }
        },
        new Func2<A, B, Pair<A, B>>() {
            @Override
            public Pair<A, B> call(A a1, B b1) {
                return new Pair<>(a1, b1);
            }
        }
      );

这篇关于RxJava / Android:结合两个依赖的Observable的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆