繁体   English   中英

如何创建一个检测另一个流的连续值增量的流?

[英]How to create a flow which detects consecutive value increments of another flow?

我有一个热流fooFlow ,它发出 integer 值。 如何构造另一个仅在 fooFlow 发出的值大于fooFlow发出的最新值时才发出值的fooFlow barFlow 从某种意义上说, barFlow检测到fooFlow的连续值增加。

示例:如果fooFlow发出 (4, 2, 7, 3, 3, 1, 2, 4, ...),则barFlow发出 (7, 2, 4, ...)。

可能有一种更自然或更干净的方式来做到这一点,但这是我的第一直觉:

val barFlow: SharedFlow<Int> = MutableSharedFlow<Int>().also { outflow ->
    var previousValue = Int.MAX_VALUE
    fooFlow.onEach { newValue ->
        if (newValue > previousValue) {
            outflow.emit(newValue)
        }
        previousValue = newValue
    }.launchIn(viewModelScope)
}

这正是fold()可以用于:

val barFlow = fooFlow.fold(Int.MIN_VALUE) { maxValue, newValue ->
  max(maxValue, newValue)
}

它允许您设置一个初始值(此处为Int.MIN_VALUE以便每个值都大于它),然后允许您访问前一个值( maxValue )和新值( newValue ),允许您进行任何比较并使用 output 作为新发出的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM