如何在RX java链中使用“if-else”?
| 
                         我是RX 
 Java / RX 
 Android的新手.我想实现这个案例:根据RXJava中的某些条件选择不同的方式. 
  我做了一些搜索,只发现“switchIfEmpty”可能有所帮助. getUserFromNetwork("userId")
                .flatMap(new Function<User,ObservableSource<User>>() {
                    @Override
                    public ObservableSource<User> apply(User user) throws Exception {
                        if(!user.isVip){
                            //show user info on MainThread!
                            return Observable.empty();
                        }else{
                            return getVipUserFromNetwork("userId");
                        }
                    }
                }).switchIfEmpty(new ObservableSource<User>() {
                    @Override
                    public void subscribe(Observer<? super User> observer) {
                        //show user info in main thread
                        //just break the chain for normal user
                        observer.onComplete();
                    }
                }).doOnNext(new Consumer<User>() {
                    @Override
                    public void accept(User user) throws Exception {
                        //show vip user info in main thread
                    }
                }).subscribe(); 
 有更简单的方法来实现这一目标吗? 谢谢! 解决方法flatMap()是一个不错的选择,您可以使用它来拆分流,但最后流合并在一起(每个拆分可观察流的所有排放流到主流).在你的代码中,switchIfEmpty()是多余的,因为它正是Observable.empty()所做的(立即调用onCompleted()),当然你需要观察者,如果你想在主线程上发生显示,但是无论如何,我认为在流中间处理这个问题并不是一个好习惯. 我认为,在您的情况下,您可以在单个处理程序中处理(响应)用户排放,因为它非常相似,只需检查是否为VIP,并相应地显示它. getUserFromNetwork("userId")
            .flatMap(new Function<User,ObservableSource<User>>() {
                @Override
                public ObservableSource<User> apply(User user) throws Exception {
                    if (!user.isVip) {
                        return Observable.just(user);
                    } else {
                        return getVipUserFromNetwork("userId");
                    }
                }
            })
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(user -> {
                if (user.isVip){
                    //display vip user
                }else{
                    //display regular user
                }
            }); 
 在这种方法中,您有一个流流,在流的中间没有“副作用”. 如果您的处理完全不同(这不是这种情况),那么您可以将流拆分为2个独立的流并以不同的方式对每个流做出反应,这可以通过多播getUserFromNetwork()Observable和来自此Observable来完成.创建2个不同的Observable,一个将继续,例如getVipUserFromNetwork(),另一个不能,并且每个都可以有不同的订户逻辑. (你可以阅读here关于多播的答案) (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
