kotlin - 在流的收集中获取当前和以前的值

标签 kotlin kotlin-coroutines coroutine kotlin-flow coroutinescope

我需要处理流收集中的当前值和先前值,因此我需要一些类似这样的运算符:

----A----------B-------C-----|--->

---(null+A)---(A+B)---(B+C)--|--->

一个想法是这样的:

fun <T: Any> Flow<T>.withPrevious(): Flow<Pair<T?, T>> = flow {
    var prev: T? = null
    this@withPrevious.collect {
        emit(prev to it)
        prev = it
    }
}

但是这样就无法控制执行第一个流程的上下文。有没有更灵活的方案?

最佳答案

Flow 是顺序的,因此您可以使用变量来存储先前的值:

coroutineScope.launch {
    var prevValue = null
    flow.collect { newValue ->
        // use prevValue and newValue here
        ...
        // update prevValue
        prevValue = newValue
    }
}

关于kotlin - 在流的收集中获取当前和以前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72626286/

相关文章:

android - liveData builder 功能解决了什么问题?

concurrency - D 中有等价的 goroutines 吗?

python - 为什么Python3.5有generator based co-routines?

kotlin - 有什么作用? : do in Kotlin?(猫王运算符)

java - 在 Fragments Android 中使用 ConstraintLayout 时的空 UI

kotlin - InternalCoroutinesApi注解是什么意思

python - 使用 asyncio 和 dnspython 异步发送 DNS 查询

android - Kotlin - 为 WebView 全局定义变量

android - Kotlin - 覆盖方法中的 IllegalArgumentException

kotlin - IDE 对 Dispatchers.IO 协程中的阻塞调用发出警告