我如何使用distinctUntilChanged()
,但也添加了一个过期,这意味着如果相同的值在流中,我们仍然收集它,因为它比expiry
长毫秒后,前一个重复的值发出。
flow {
emit("A") // printed
emit("B") // printed
emit("A") // printed
emit("A") // NOT printed because duplicate
delay(5000)
emit("A") // printed because 5 seconds elapsed which is more than expiry
}
.distinctUntilChanged(expiry = 2000)
.collect {
println(it)
}
我希望打印以下内容:
A
B
A
A
下面是测试它的代码:
@Test
fun `distinctUntilChanged works as expected`(): Unit = runBlocking {
flow {
emit("A") // printed
emit("B") // printed
emit("A") // printed
emit("A") // NOT printed because duplicate
delay(5000)
emit("A") // printed because 5 seconds elapsed which is more than expiry
}
.distinctUntilChanged(expiry = 2000)
.toList().also {
assertEquals("A", it[0])
assertEquals("B", it[1])
assertEquals("A", it[2])
assertEquals("A", it[3])
}
}
1条答案
按热度按时间4smxwvx51#
我认为这是可行的,但我没有做太多测试。我认为逻辑是不言自明的。
havePreviousValue
存在的原因是T
是可空的,第一个发出的值是null
。