[英]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.