distinctUntilChanged

abstract fun distinctUntilChanged(areEquivalent: (T, T) -> Boolean): Flow<T>

过滤掉 连续重复 的元素,仅当相邻两次值通过 areEquivalent 比较返回 true 时视为重复。

与无参 distinctUntilChanged 的区别在于:这里可以自定义“等价”逻辑,而不仅仅是 ==

用法示例

data class User(val id: Int, val name: String)

usersFlow
.distinctUntilChanged { old, new -> old.id == new.id } // 只要 id 相同即视为重复
.collect { println(it) }

注意

  • 只比较 相邻 值,不会维护历史集合。

  • 适用于 状态流传感器数据 等需要忽略相邻相同事件的场景。

  • 若需 全局去重 请使用自定义扩展,例如维护一个 MutableSet<T>

Return

新 Flow,仅当 areEquivalent 返回 false 时向下游发射元素。

Parameters

areEquivalent

返回 true 表示新旧值等价,当前值会被过滤掉;false 则放行。