distinct Until Changed
过滤掉 连续重复 的元素,仅当相邻两次值通过 areEquivalent 比较返回 true 时视为重复。
与无参 distinctUntilChanged 的区别在于:这里可以自定义“等价”逻辑,而不仅仅是 ==。
用法示例
data class User(val id: Int, val name: String)
usersFlow
.distinctUntilChanged { old, new -> old.id == new.id } // 只要 id 相同即视为重复
.collect { println(it) }Content copied to clipboard
注意
只比较 相邻 值,不会维护历史集合。
适用于 状态流、传感器数据 等需要忽略相邻相同事件的场景。
若需 全局去重 请使用自定义扩展,例如维护一个
MutableSet<T>。
Return
新 Flow,仅当 areEquivalent 返回 false 时向下游发射元素。
Parameters
are Equivalent
返回 true 表示新旧值等价,当前值会被过滤掉;false 则放行。