This was an intense chapter, but it provides a solid foundation for how to use RxJava to tackle real-world work. RxJava, with all of its expressive power, has some nuances that are entirely due to the change of mindset it demands.
It has done an impressive amount of work taking an imperative language like Java and adapting it to become reactive and functional. But this interoperability requires some understanding of the implementations between an Observable and an Observer. We touched on various ways to create an Observable as well as how it interacts with Observer.
Take your time to digest all this information but do not let it stop you from moving on to the next two chapters, where the usefulness of RxJava starts to take form and the pragmatic application of RxJava becomes clear.