Reactive programming is a programming paradigm in which state changes are propagated and reacted to via streams of data
As the name suggests, reactive code is written to react to changes in the underlying data state. State changes are exposed via streams of data that can be subscribed to and manipulated toward achieving the desired output. Changes in the underlying state will propagate new events and update the output state. In practical terms, this means that you can focus on modifying the state and any observers of that state will be notified; the state change is independent of the associated actions.
Reactive code can be used for event-driven programming, and is well suited to applications that must react to events, such as user input or sensor data. It is compatible with other paradigms such as object-oriented and functional programming, and the concepts can generally be translated across implementations.
Reactive programming is quite similar to the observer pattern in that it allows you to write code that responds to changes in some observed state or object. The ReactiveX project incorporates the Observer pattern into its APIs as a means of formalizing the relationship and nomenclature between Observer and Reactive patterns. In the next section, we'll discuss RxJava, the JVM implementation of the ReactiveX project.