是否有可能在rxjava android中的订阅者的onNext()中获得2个值?

the*_*del 14 android rx-java

我有这样的观察

Observable.zip(observable, extObs, new Func2<List<UserProfile>, ArrayList<Extension>, UserProfile>() {
        @Override
        public UserProfile call(List<UserProfile> userProfiles, ArrayList<Extension> extensions) {


            return userProfiles.get(0);
        }
    }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).unsubscribeOn(Schedulers.io()).subscribe(new Subscriber<UserProfile>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
        }

        @Override
        public void onNext(UserProfile userProfile) {
            profileListener.onProfileSet(userProfile);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我需要通过ArrayList中的方法profileListener.onProfileSet(userProfile);profileListener.onProfileSet(userProfile,extensions);

是否可以在zip中执行此操作,还是有任何其他rxjava方法来解决此类问题?

Bar*_*ski 13

你必须完成cricket_007在评论中建议的内容.

例如这样:

  1. 创建一个表示您的observable的组合结果的类:

class CombinedResults {
    public UserProfile userProfile;
    public List<Extension> extensions;

    public CombinedResults(UserProfile userProfile, List<Extension> extensions) {
        this.userProfile = userProfile;
        this.extensions = extensions;
    }
}
Run Code Online (Sandbox Code Playgroud)

(或者你可以使用Pair课程)

  1. 在你的中使用CombinedResults(或Pair)对象Observable.zip Func2.

Observable.zip(observable, extObs,
        new Func2<List<UserProfile>, ArrayList<Extension>, CombinedResults>() {
            @Override
            public CombinedResults call(List<UserProfile> userProfiles, ArrayList<Extension> extensions) {
                return new CombinedResults(userProfiles.get(0), extensions);
            }
        })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .unsubscribeOn(Schedulers.io())
        .subscribe(new Subscriber<CombinedResults>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {
                e.printStackTrace();
            }

            @Override
            public void onNext(CombinedResults combined) {
                profileListener.onProfileSet(combined.userProfile, combined.extensions);
            }
        });
Run Code Online (Sandbox Code Playgroud)