Kotlin协程Flow流buffer缓冲批量任务或数据,条件筛选任务或数据

Kotlin协程Flow流buffer缓冲批量任务或数据,条件筛选任务或数据

Kotlin 复制代码
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.buffer
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.runBlocking

fun main() {
    runBlocking {
        var eachFlag = true
        var collectFlag = true

        (0..50)
            .chunked(5) //切块,分区
            .asFlow()
            .onStart { println("onStart") }
            .onEach { itList ->
                //假设这里是生产者,密集生产数据或任务

                collectFlag = true

                if (eachFlag) {
                    println("--------------------")
                    eachFlag = false
                }

                print("onEach [ ")
                itList.forEach { itData ->
                    print("$itData ")
                }
                print("]")

                println()
            }
            .buffer(capacity = 3, onBufferOverflow = BufferOverflow.SUSPEND)
            .collect { itList ->
                //假设这里是消费者,这里的消费者以一定的耗时完成任务或消费数据

                eachFlag = true

                if (collectFlag) {
                    println("↓")
                    collectFlag = false
                }

                print("collect [ ")
                itList.forEach { itData ->
                    print("$itData ")
                }
                print("]")

                val sortedList = itList.sortedBy { it }
                print(" 最大值=${sortedList.lastOrNull()} 最小值=${sortedList.firstOrNull()}")

                println()
            }
    }
}

输出:

onStart


onEach 0 1 2 3 4

onEach 5 6 7 8 9

onEach 10 11 12 13 14

onEach 15 16 17 18 19

onEach 20 21 22 23 24

collect 0 1 2 3 4 最大值=4 最小值=0

collect 5 6 7 8 9 最大值=9 最小值=5

collect 10 11 12 13 14 最大值=14 最小值=10

collect 15 16 17 18 19 最大值=19 最小值=15

collect 20 21 22 23 24 最大值=24 最小值=20


onEach 25 26 27 28 29

onEach 30 31 32 33 34

onEach 35 36 37 38 39

onEach 40 41 42 43 44

onEach 45 46 47 48 49

collect 25 26 27 28 29 最大值=29 最小值=25

collect 30 31 32 33 34 最大值=34 最小值=30

collect 35 36 37 38 39 最大值=39 最小值=35

collect 40 41 42 43 44 最大值=44 最小值=40

collect 45 46 47 48 49 最大值=49 最小值=45


onEach 50

collect 50 最大值=50 最小值=50

相关:

https://blog.csdn.net/zhangphil/article/details/132527122

https://blog.csdn.net/zhangphil/article/details/139237348

相关推荐
YB13751 天前
kotlin 关键字expect/actual的作用
kotlin
Android打工仔1 天前
不要再把 Flow 当作一个容器
android·kotlin
天空之城--2 天前
Android行业一周动态:编码趋势与行业资讯汇总
android·性能优化·架构·kotlin·android jetpack
JMchen2 天前
第 2 篇|Kotlin 进阶 —— 集合、循环与条件表达式
android·kotlin
YB13752 天前
Kotlin 三类关键字
kotlin
撩得Android一次心动3 天前
Jetpack Compose 知识点整理1【个人用】
android·学习·kotlin·android jetpack·compose
ForteScarlet3 天前
Kotlin 2.4.20 现已发布,新特性多不多?
android·java·开发语言·开源·kotlin·jetbrains
JMchen1233 天前
Cursor高阶玩法:.cursorrules编写与Spec-Driven开发实战,把AI调教成专属结对编程搭档
人工智能·vscode·kotlin·cursor·结对编程·spec-driven·.cursorrules
hai_android3 天前
Kotlin 协程作用域源码剖析
android·kotlin
leluckys3 天前
【KMP】-KMP 项目commonMain、androidMain、iosMain 到底放什么?
kotlin