I've been used Futures in guava for a long time. I use it to chaining, combining, adding callback for listenable future.
Recently I start to study Lettuce, a java client for redis. And Lettuce provides asynchronous client which implements with CompletionStage, and reactive client which implements with RxJava.
In my opinion, CompletionStage is an implementation of Guava Futures in Java 8. And the characters provided by CompletionStage is all most the same with RxJava. Such as
Futures.transform() vs Observable.map()
Futures.addCallback() vs Observable.subscribe()
So what's the advantages of RxJava compare to Futures/CompletionStage?