Rxjava Observables 依赖

Rxjava Observables dependency

我想用 Observables 完成一些事情,但我想不出办法。

想象我有:

为了使用 ObservableB,我需要 ObservableA 的结果。 得到 ObservableB 的结果后,我需要构造一个 Object 结果为 ObservableA 和 Observable B.

哪个操作员适合做这件事=?我找不到。

我尝试使用 zip:

return Observable.zip(
        observableA.flatMap(A -> ObservableB(A))
        ,
        ObservableA
        , new Func2<B, A, Object>() {
            @Override
            public Object call(B b, A a) {
                String ab = someFunction(a.someFunction());
                return new Object(a, ab, b);
            }
        });

但 zip return 项目不是另一个可观察的。

编辑:我设法完成了它:

return Observable.zip(
            getRosterEntry(userXmppAddress).flatMap(rosterEntry -> getRosterPresence(rosterEntry.getUser()))
            ,
            getRosterEntry(userXmppAddress)
            , new Func2<Presence, RosterEntry, Friend>() {
                @Override
                public Friend call(Presence presence, RosterEntry rosterEntry) {
                    String finalUserXmppAddress = AppXmppUtils.parseXmppAddress(rosterEntry.getUser());
                    return new Friend(rosterEntry.getName(), finalUserXmppAddress, presence);
                }
            }).flatMap(Observable::just);

不过好像有点过码了。有没有其他方法可以做到这一点?

您应该可以这样做:

getRosterEntry(userXmppAddress)
        .flatMap(new Func1<RosterEntry, Observable<Friend>>() {
            @Override
            public Observable<Friend> call(final RosterEntry rosterEntry) {
                return getRosterPresence(rosterEntry.getUser())
                        .map(new Func1<Presence, Friend>() {
                            @Override
                            public Friend call(Presence presence) {
                                String finalUserXmppAddress = AppXmppUtils.parseXmppAddress(rosterEntry.getUser());
                                return new Friend(rosterEntry.getName(), finalUserXmppAddress, presence);
                            }
                        });
            }
        });