Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Rxjava可观测依赖项_Android_Rx Java - Fatal编程技术网

Android Rxjava可观测依赖项

Android Rxjava可观测依赖项,android,rx-java,Android,Rx Java,有一些事情我想通过观察来完成,但我想不出一个方法来完成 想象一下我有: 可观察的 可观测B 为了使用ObservableB,我需要ObservableA的结果。 在得到Observable的结果之后,我需要构造一个对象 根据可观测A和可观测B的结果 哪一个运算符是执行此操作的正确运算符=?我找不到 我试过使用zip: return Observable.zip( observableA.flatMap(A -> ObservableB(A)) ,

有一些事情我想通过观察来完成,但我想不出一个方法来完成

想象一下我有:

  • 可观察的
  • 可观测B
为了使用ObservableB,我需要ObservableA的结果。 在得到Observable的结果之后,我需要构造一个对象 根据可观测A和可观测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);
            }
        });
returnobservable.zip(
可观察平面图(A->可观察B(A))
,
可观察的
,新功能2(){
@凌驾
公共对象调用(B,A){
字符串ab=someFunction(a.someFunction());
返回新对象(a、ab、b);
}
});
但zip返回的项目不是另一个可见的

编辑:我设法完成了:

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);
returnobservable.zip(
getRosterEntry(UserXMpAddress).flatMap(rosterEntry->getRosterPresence(rosterEntry.getUser()))
,
getRosterEntry(UserXmpAddress)
,新功能2(){
@凌驾
公共好友呼叫(状态、排班、排班){
字符串finalUserXmpAddress=AppXmppUtils.parseXmpAddress(rosterEntry.getUser());
返回新朋友(rosterEntry.getName(),finalUserXmpAddress,状态);
}
}).flatMap(可观察::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);
                            }
                        });
            }
        });
getRosterEntry(userXmppAddress)
.flatMap(新函数1(){
@凌驾
公共可观察呼叫(最终排班排班){
返回getRosterPresence(rosterEntry.getUser())
.map(新函数1(){
@凌驾
公众朋友电话(状态){
字符串finalUserXmpAddress=AppXmppUtils.parseXmpAddress(rosterEntry.getUser());
返回新朋友(rosterEntry.getName(),finalUserXmpAddress,状态);
}
});
}
});