Search code examples
rx-javarx-android

How to ignore some transform in rxjava


As the following example code, if something true in the flapMap, could I ignore some transformings and running the subscribe() immediately.

 Observable.just("10+20", "123", "10x20", "10")
            .flatMap(new Func1<String, Observable<String>>() {
                @Override
                public Observable<String> call(String s) {
                    //if something true
                    //else continue next map
                    return null;
                }
            })
            .map(new Func1<String, String>() {
                @Override
                public String call(String s) {
                    //do something one
                    return null;
                }
            })
            .map(new Func1<String, String>() {
                @Override
                public String call(String s) {
                    //do something two
                    return null;
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1<String>() {
                @Override
                public void call(String s) {
                    //end
                }
            });

Is it possible to do so?


Solution

  • You can nest transformation in flatMap operator

        Observable.just("10+20", "123", "10x20", "10")
                .flatMap(new Func1<String, Observable<String>>() {
                    @Override
                    public Observable<String> call(String string) {
                        if (condition) {
                            return Observable.just(string);
                        } else {
                            return Observable.just(string)
                                    .map(new Func1<String, String>() {
                                        @Override
                                        public String call(String s) {
                                            //do something one
                                            return null;
                                        }
                                    })
                                    .map(new Func1<String, String>() {
                                        @Override
                                        public String call(String s) {
                                            //do something two
                                            return null;
                                        }
                                    })
                        }
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        //end
                    }
                });