Reactive Streams and RxJava
RxJava 2.x is a complete rewrite from its predecessor, RxJava 1.x.
RxJava 1.x was created before Reactive Streams Specification, and because of this it doesn't implement it. RxJava 2.x, on the other hand, is written on top of Reactive Streams Specification and fully implements it, and also targets Java 8+. RxJava types in RxJava 1.x have been fully tweaked to comply with the specification and suffered heavy changes when the rewrite took place. It's good to note that there exists a bridge library (https://github.com/ReactiveX/RxJavaReactiveStreams) that bridges between RxJava 1.x types and Reactive Streams, allowing RxJava 1.x to pass the Reactive Streams TCK-compliance tests.
In RxJava 2.x, many concepts remain intact but names have been changed to comply with the spec.
We will not be going deep into RxJava as it is a big topic and there are plenty of books available that dive deep into RxJava.