Note that there’s also buffer(), and the difference between window() is subtle.
Here is an example from an article I wrote a while ago:
Observable.just(1, 2, 3, 4, 5)
.buffer(3, 1)
.subscribe { p("Received ${it}")
prints:
[main] Received [1, 2, 3]
[main] Received [2, 3, 4]
[main] Received [3, 4, 5]
[main] Received [4, 5]
[main] Received [5]