You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Kotlin Flow的distinctUntilChanged添加过期时间?

为Kotlin Flow的distinctUntilChanged添加过期机制

我需要给Kotlin Flow的distinctUntilChanged()扩展一个过期逻辑:当相同值距离上次重复发射的时间间隔超过expiry毫秒时,这个值依然会被下游收集。

示例代码

flow { 
  emit("A")    // 会被打印
  emit("B")    // 会被打印
  emit("A")    // 会被打印
  emit("A")    // 不会被打印,因为是重复值
  delay(5000)
  emit("A")    // 会被打印,因为间隔超过了设定的2000毫秒过期时间
}
  .distinctUntilChanged(expiry = 2000)
  .collect {
    println(it)
  }

预期输出

A
B
A
A

测试代码

@Test
fun `distinctUntilChanged works as expected`(): Unit = runBlocking {
  flow {
    emit("A")    // 会被收集
    emit("B")    // 会被收集
    emit("A")    // 会被收集
    emit("A")    // 不会被收集,因为是重复值
    delay(5000)
    emit("A")    // 会被收集,因为间隔超过了2000毫秒过期时间
  }
    .distinctUntilChanged(expiry = 2000)
    .toList().also {
      assertEquals("A", it[0])
      assertEquals("B", it[1])
      assertEquals("A", it[2])
      assertEquals("A", it[3])
    }
}

内容的提问来源于stack exchange,提问作者vovahost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:55:17