flow的操作符号

distinctUntilChanged

public fun  Flow.distinctUntilChanged(): Flow =
    when (this) {
        is StateFlow<*> -> this // state flows are always distinct
        else -> distinctUntilChangedBy(keySelector = defaultKeySelector, areEquivalent = defaultAreEquivalent)
    }

这是最常用的去重操作之一,只去掉连续重复的元素

意思是去掉连续的

flowOf(1,1,2,3,4,1,1).distinctUntilChanged().collect{
   println("==$it")
}

打印:

==1
==2
==3
==4
==1

stateflow是天生就有这个属性,所以如果给stateflow加上这个是无效果的。

一共三个方法

✅ 总结

方法 去除重复方式 场景举例
distinctUntilChanged() 过滤连续相同的值 基础类型、data class
distinctUntilChangedBy { key } 根据字段值过滤 对象只按 id 去重
distinctAll()(自定义) 全局唯一去重 不管是否连续,都过滤重复

 distinctUntilChanged是提供新值和旧值给你自己比较的

flowOf(FlowTest("1"),FlowTest("1"),FlowTest("1"),FlowTest("1")).distinctUntilChanged { old, new -> old.name == new.name }.collect{
 println("it=${it.name}")
}

问:

flow是一个冷流,也没有存储,他怎么判断这个发送的值是否和上次的相同

你可能感兴趣的:(java,服务器,前端)