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