diff --git a/rxjava/pom.xml b/rxjava/pom.xml
index 783833243be8..0f950914ff34 100644
--- a/rxjava/pom.xml
+++ b/rxjava/pom.xml
@@ -25,6 +25,12 @@
2.1.3
+
+ io.reactivex
+ rxjava-math
+ 1.0.0
+
+
com.jayway.awaitility
awaitility
diff --git a/rxjava/src/test/java/com/baeldung/rxjava/operators/RxAggregateOperatorsTest.java b/rxjava/src/test/java/com/baeldung/rxjava/operators/RxAggregateOperatorsTest.java
new file mode 100644
index 000000000000..1af41f795f02
--- /dev/null
+++ b/rxjava/src/test/java/com/baeldung/rxjava/operators/RxAggregateOperatorsTest.java
@@ -0,0 +1,210 @@
+package com.baeldung.rxjava.operators;
+
+import org.junit.Test;
+import rx.Observable;
+import rx.observers.TestSubscriber;
+
+import java.util.*;
+
+public class RxAggregateOperatorsTest {
+
+ @Test
+ public void givenTwoObservable_whenConcatenatingThem_thenSuccessfull() {
+ // given
+ List listOne = Arrays.asList(1, 2, 3, 4);
+ Observable observableOne = Observable.from(listOne);
+
+ List listTwo = Arrays.asList(5, 6, 7, 8);
+ Observable observableTwo = Observable.from(listTwo);
+
+ TestSubscriber subscriber = TestSubscriber.create();
+
+ // when
+ Observable concatObservable = observableOne.concatWith(observableTwo);
+
+ concatObservable.subscribe(subscriber);
+
+ // then
+ subscriber.assertCompleted();
+ subscriber.assertNoErrors();
+ subscriber.assertValueCount(8);
+ subscriber.assertValues(1, 2, 3, 4, 5, 6, 7, 8);
+
+ }
+
+ @Test
+ public void givenObservable_whenCounting_thenObtainingNumberOfElements() {
+ // given
+ List lettersList = Arrays.asList("A", "B", "C", "D", "E", "F", "G");
+
+ TestSubscriber subscriber = TestSubscriber.create();
+
+ // when
+ Observable sourceObservable = Observable.from(lettersList)
+ .count();
+ sourceObservable.subscribe(subscriber);
+
+ // then
+ subscriber.assertCompleted();
+ subscriber.assertNoErrors();
+ subscriber.assertValueCount(1);
+ subscriber.assertValue(7);
+ }
+
+ @Test
+ public void givenObservable_whenReducing_thenObtainingInvertedConcatenatedString() {
+ // given
+ List list = Arrays.asList("A", "B", "C", "D", "E", "F", "G");
+
+ TestSubscriber subscriber = TestSubscriber.create();
+
+ // when
+ Observable reduceObservable = Observable.from(list)
+ .reduce((letter1, letter2) -> letter2 + letter1);
+ reduceObservable.subscribe(subscriber);
+
+ // then
+ subscriber.assertCompleted();
+ subscriber.assertNoErrors();
+ subscriber.assertValueCount(1);
+ subscriber.assertValue("GFEDCBA");
+ }
+
+ @Test
+ public void givenObservable_whenCollecting_thenObtainingASet() {
+ // given
+ List list = Arrays.asList("A", "B", "C", "B", "B", "A", "D");
+
+ TestSubscriber subscriber = TestSubscriber.create();
+
+ // when
+ Observable reduceListObservable = Observable.from(list)
+ .collect(() -> new HashSet(), (set, item) -> set.add(item));
+ reduceListObservable.subscribe(subscriber);
+
+ // then
+ subscriber.assertCompleted();
+ subscriber.assertNoErrors();
+ subscriber.assertValueCount(1);
+ subscriber.assertValues(new HashSet(list));
+ }
+
+ @Test
+ public void givenObservable_whenUsingToList_thenObtainedAList() {
+ // given
+ Observable sourceObservable = Observable.range(1, 5);
+ TestSubscriber subscriber = TestSubscriber.create();
+
+ // when
+ Observable> listObservable = sourceObservable.toList();
+ listObservable.subscribe(subscriber);
+
+ // then
+ subscriber.assertCompleted();
+ subscriber.assertNoErrors();
+ subscriber.assertValueCount(1);
+ subscriber.assertValue(Arrays.asList(1, 2, 3, 4, 5));
+
+ }
+
+ @Test
+ public void givenObservable_whenUsingToSortedList_thenObtainedASortedList() {
+ // given
+ Observable sourceObservable = Observable.range(10, 5);
+ TestSubscriber subscriber = TestSubscriber.create();
+
+ // when
+ Observable> listObservable = sourceObservable.toSortedList();
+ listObservable.subscribe(subscriber);
+
+ // then
+ subscriber.assertCompleted();
+ subscriber.assertNoErrors();
+ subscriber.assertValueCount(1);
+ subscriber.assertValue(Arrays.asList(10, 11, 12, 13, 14));
+ }
+
+ @Test
+ public void givenObservable_whenUsingToSortedListWithComparator_thenObtainedAnInverseSortedList() {
+ // given
+ Observable sourceObservable = Observable.range(10, 5);
+ TestSubscriber subscriber = TestSubscriber.create();
+
+ // when
+ Observable> listObservable = sourceObservable.toSortedList((int1, int2) -> int2 - int1);
+ listObservable.subscribe(subscriber);
+
+ // then
+ subscriber.assertCompleted();
+ subscriber.assertNoErrors();
+ subscriber.assertValueCount(1);
+ subscriber.assertValue(Arrays.asList(14, 13, 12, 11, 10));
+
+ }
+
+ @Test
+ public void givenObservable_whenUsingToMap_thenObtainedAMap() {
+ // given
+ Observable bookObservable = Observable.just(new Book("The North Water", 2016), new Book("Origin", 2017), new Book("Sleeping Beauties", 2017));
+ TestSubscriber