distinctUntilChangedBy() works a lot like distinctUntilChanged(), throwing out equivalent items and only emitting the first of those equivalents. The difference is that distinctUntilChangedBy() takes a "key selector" lambda expression or other function type. This lambda expression is responsible for returning the object that should be used (via == comparisons) to determine what items are equivalent or not.

In this case, our flow is of a series of pairs, and the key selector lambda returns the first() piece of the Pair — in this case, that is the Int value. distinctUntilChangedBy() then ignores Pair objects with duplicate Int values, so only the first of our three 1-based Pair objects is emitted.

You can learn more about this in:
Run Edit