Open In App

RxJava Operator – Concat and Merge

Improve
Improve
Like Article
Like
Save
Share
Report

RxJava is the most significant library, and it is widely used by Android developers. It simplifies our lives. RxJava is used for multithreading, managing background processes, and eliminating callback hells. RxJava allows us to address a wide range of complicated use-cases. It allows us to accomplish complex things in a very easy way. It gives us the ability. And as the saying from your superhero movie goes: With great powers, comes great responsibility. RxJava contains a plethora of operators. We must be aware of them in order to use them appropriately. The Concat and Merge Operators will be covered in this section.

The Concat

It concatenates the emissions of two or more Observables without interleaving them. While emitting the items, it will keep the order of the observables. That is, it will emit all of the things in the first observable, then all of the items in the second observable, and so on.

Diagram 1. Explaining Concatenate

Let’s have a look at an example to help you understand:

Java




final String[] gfgList = { "DSA", "Py", "Android", "Java" };
final String[] gfgListTwo = { "Intern", "FullTime", "PartTime" };
  
final Observable<String> gfgObs1 = Observable.fromArray(gfgList);
final Observable<String> gfgObs2 = Observable.fromArray(gfgListTwo);
  
Observable.concat(gfgObs1, gfgObs2)
    .subscribe(new Observer<String>() {
        @Override public void onSubscribe(Disposable d)
        {
            // Your Code
        }
        @Override public void onNext(String value)
        {
            // Your Code
        }
        @Override public void onError(Throwable e)
        {
            // Your Code
        }
        @Override public void onComplete()
        {
            // Your Code
        }
  });


Output:

Because we are using the Concat Operator, the order will be preserved and the values will be emitted as:

DSA, Py, Android, Java, Intern, FullTime, PartTime.

The Merge

It merges the emissions of multiple Observables to create a single Observable. It will not keep the order while emitted things.

Diagram 2. Explaining Merge.

Now, like concatenate let’s look at an example:

Java




final String[] gfgList = {"DSA", "Py", "Android", "Java"};
final String[] gfgListTwo = {"Intern", "FullTime", "PartTime"};
  
final Observable<String> gfgList = Observable.fromArray(gfgList);
final Observable<String> gfgListTwo = Observable.fromArray(gfgListTwo);
  
Observable.merge(gfgList, observableSecond)
        .subscribe(new Observer<String>() {
  
            @Override
            public void onSubscribe(Disposable d) {
                // Your Code
            }
  
            @Override
            public void onNext(String value) {
                // Your Code
            }
  
            @Override
            public void onError(Throwable e) {
                // Your Code
            }
  
            @Override
            public void onComplete() {
                // Your Code
            }
        });


Output:

Because we are using the Merge Operator, the values can be emitted in any sequence, such as:

DSA, Android, Intern, Java, FullTime, Py, PartTime 

or 

PartTime, Java, FullTime, Android, DSA, Intern, Py 

or anything.

Conclusion

This was all for this article, hope it helped you understand how both methods differ, depending on our use-case, we should utilize the Concat and Merge operators in RxJava.



Last Updated : 11 Aug, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads