People often ask me: Why should I bother using RxJava or Reactor, if I can achive the same with Streams, CompletableFutures or Optionals? The problem is, most of the time you are solving simple tasks, and you really don't need those libraries. But, when things get more complex, you have to write some freaky piece of code.