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

相关推荐
urkay-3 小时前
Kotlin Flow分类
android·开发语言·kotlin
alexhilton14 小时前
Kotlin DSL深度解析:从Gradle脚本到构建你自己的DSL
android·kotlin·android jetpack
Kapaseker1 天前
Android 开放这扇门,正在被 Google 从里面反锁
android·kotlin
唐青枫1 天前
别再把 Util 类堆成杂物间:Kotlin Extension 扩展函数与扩展属性实战详解
kotlin
plainGeekDev2 天前
依赖管理 → Version Catalog
android·java·kotlin
黄林晴2 天前
KMP 正式支持 SwiftPM:CocoaPods 迁移配置指南
android·ios·kotlin
花燃柳卧3 天前
跨平台路由组件工程源码补充上传
android·flutter·kotlin
TechNomad3 天前
Kotlin类对象与接口详解
android·kotlin
Ws_3 天前
Kotlin Multiplatform day2
kotlin
TechNomad4 天前
Kotlin_Lambda编程详解
android·kotlin