kotlin 获取流收集中的当前值和先前值

gajydyqb  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(176)

我需要处理流收集中的当前值和先前值,因此我需要一些如下操作符:

----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
    }
}

但是这样就无法控制第一个流将在其中执行的上下文。有更灵活的解决方案吗?

b91juud3

b91juud31#

Flow是连续的,因此您可以使用变量来存储前一个值:

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

相关问题