Composing Observable objects
Having seen different ways of creating various types of Observable
objects, subscribing to their events, and using the Subscription
objects, we turn to composing Observable
objects into larger programs. From what we have seen so far, the advantages of using Observable
objects over a callback-based API are hardly worth the trouble.
The true power of Rx becomes apparent when we start composing Observable
objects using various combinators. We can think of an Observable
object in a similar way as we think of Scala sequence collections. In a Scala sequence, represented with the Seq[T]
trait, elements of type T
are ordered in the memory according to their indices. In an Observable[T]
trait, events of type T
are ordered in time.
Let's use the Observable.interval
factory method in order to create an Observable
object, which asynchronously emits a number every 0.5 seconds, and then output the first five odd numbers. To do this, we first call filter
on the Observable...