rxjava 2 flapMap with filter example in Android

The following code takes a list of integers, the first flapMap passes each integer in the list to the filter one at a time, the filter filters out odd numbers or passes it to the next flapMap if it is an even number.

Input: 1,2,3,4,5,6,7,8,9
Filter out odd numbers 1, 3, 5, 6, 9
Pass down the even numbers 2, 4, 6, 8 to the last flatMap
The last flapMap multiply each even number by 2
The onNext in the subscribe prints 4, 8, 12, 16 one by one

private void flapMapEx() {
    List<Integer> ints = new ArrayList<>();
    for (int i=1; i<10; i++) {
        ints.add(new Integer(i));
    }
    Log.d("flatMap", "1,2,3,4,5,6,7,8,9");

    Observable.just(ints)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap(new Function<List<Integer>, Observable<Integer>>() {
                @Override
                public Observable<Integer> apply(List<Integer> ints) {
                    return Observable.fromIterable(ints);
                }
            })
            .filter(new Predicate<Integer>() {
                @Override
                public boolean test(Integer integer) {
                    Log.d("flatMap", "filter out odd numbers.........");
                    return integer.intValue() % 2 == 0;
                }
            })
            .flatMap(new Function<Integer, Observable<Integer>>() {
                @Override
                public Observable<Integer> apply(Integer integer) {
                    //simulating a heavy duty computational expensive operation
                    for (int i = 0; i < 1000000000; i++) {
                    }
                    return multiplyInt(integer, 2);
                }
            })
            .subscribe(new Observer<Integer>() {
                @Override
                public void onSubscribe(Disposable d) {
                }
                @Override
                public void onComplete() {
                }
                @Override
                public void onError(Throwable e) {
                    e.printStackTrace();
                }
                @Override
                public void onNext(Integer integer) {
                    Log.d("flatMap", "onNext: " + integer.toString());
                }
            });
}

Search within Codexpedia

Custom Search

Search the entire web

Custom Search