簡體   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