Преимущество в том, что при использовании иммутабельных объектов поток данных остаётся однонаправленным. А если ты будешь мутировать объекты, могут произойти адские спецэффекты. Например.
data class Data(var x : Int)
Observable.just(1, 1, 2, 2)
.doOnNext { print("I'm $it") }
.map(::Data)
. distinctUntilChanged()
.map{
it.apply{ x++ }
}
.doOnNext { print("Now I'm $it") }
.subscribe()
Что оно напечатает? Прямо так сходу и не скажешь, тут думать надо. И какого поведения ждал автор такого кода? Непонятно. А это примитивная цепочка, представь, какая жесть может случиться в более сложной ситуации.