Android 如何使用单功能和可观察的双功能实现可观察zip?

Android 如何使用单功能和可观察的双功能实现可观察zip?,android,observable,Android,Observable,如何使用双功能正确实现Observable.zip 一个返回一个,一个返回一个可观察的,不确定这是否可能 谢谢你的评论,这是我的更新。我不确定在下面的双功能中放什么 Observable.zip( mCurrentUserViewModel.getUserProfile(getUserProfileRequest).toObservable(), mTopicsByCurrentUserViewModel.getTopicsByCreato

如何使用双功能正确实现Observable.zip

一个返回一个,一个返回一个可观察的,不确定这是否可能

谢谢你的评论,这是我的更新。我不确定在下面的双功能中放什么

    Observable.zip(
            mCurrentUserViewModel.getUserProfile(getUserProfileRequest).toObservable(),
            mTopicsByCurrentUserViewModel.getTopicsByCreator(getTopicsByCreatorRequest)),
            new BiFunction<Single<GetUserProfileResponseBody>, Observable<Response<GetTopicsByCreatorResponseBody>>, **what do i put here**>()
    );
Observable.zip(
mCurrentUserViewModel.getUserProfile(getUserProfileRequest).toObservable(),
mTopicsByCurrentUserViewModel.getTopicsByCreator(getTopicsByCreatorRequest)),
新的双函数()
);

示例zip函数:

    private Observable<String> stringObservable() {
        return Observable.just("D");
    }

    private Observable<Integer> integerObservable() {
        return Observable.just(1);
    }

    private Observable<String> resultObservable(){
        return Observable.zip(stringObservable(), integerObservable(), new BiFunction<String, Integer, String>() {
            @Override public String apply(String s, Integer integer) throws Exception {
                return s + integer;
            }
        });
    }

    private Observable<String> resultObservableLambda(){
        return Observable.zip(stringObservable(), integerObservable(), (s, i) -> s + i);
    }
private Observable stringObservable(){
可观察到的回报。公正(“D”);
}
私有可观测积分可观测(){
可观察到的回报。仅(1);
}
私有可观测结果可观测(){
return Observable.zip(stringObservable(),integerObservable(),new BiFunction()){
@重写公共字符串应用(字符串s,整数)引发异常{
返回s+整数;
}
});
}
私有可观测结果可观测lambda(){
返回Observable.zip(stringObservable(),integerObservable(),(s,i)->s+i);
}

您缺少的第三项是退货类型。那么,您希望返回的聚合类型是什么呢?在本例中,
字符串
,因此将返回一个新的可观察的
可观察的

toSingle()
将发出单个项目的可观察转换为发出该项目的单个项目

toObservable
将单个对象转换为可观察对象

例如:使用
toObservable()

1-创建您的可观察对象

private Observable<String> getObservable() {
    return Observable.just("observable");
}

private Single<String> singleObservable() {
    return Single.just("single");
}

private Observable<String> mergedObservable() {
    return Observable.zip(getObservable(), singleObservable().toObservable(), new BiFunction<String, String, String>() { //the result of merging is also String
        @Override
        public String apply(String s, String s2) {
            return s + s2;  //or if you are using different objects create a model AandB. where A and B are the result of a seperate observers.
        }
    });
}
private Observable getObservable(){
可观察的回报。公正(“可观察”);
}
私有单可观察(){
返回单身。只是(“单身”);
}
私有可观测合并可观测(){
返回Observable.zip(getObservable(),singleObservable().toObservable(),new BiFunction(){//合并的结果也是字符串
@凌驾
公共字符串应用(字符串s、字符串s2){
返回s+s2;//或者如果使用不同的对象,则创建模型a和B。其中a和B是单独观察者的结果。
}
});
}
2-合并它们

           mergedObservable().subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new Observer<String>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(String s) {
                    Log.d(tag,s);
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });
mergedObservable().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribouth(新观察员){
@凌驾
认购的公共无效(一次性d){
}
@凌驾
public void onNext(字符串s){
日志d(标签s);
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
未完成的公共空间(){
}
});
输出

observesIngle

然后在
单条上添加
.toObservable()
我不想合并结果,我希望getUserProfile和gettopics是单独的响应,我只希望它们同时运行,这样我可以节省时间,然后查看Rx操作符并选择一个适合您需要的,我不想合并结果,我希望getUserProfile和gettopics是单独的响应,我只是希望它们同时运行,这样可以节省时间。我认为这是一个误解。要运行两个单独的请求,只需使用subscribeOn().Zip用于合并到结果。