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

相关推荐
ZealSinger21 小时前
Kotlin后端别再用GlobalScope
kotlin·协程·后端开发·结构化并发
mmsx2 天前
Android 上的 AI 对话链路:流式响应、SSE 解析与三级降级
android·kotlin
YB13752 天前
Kotlin 引用操作符::
kotlin
维克兜率天3 天前
【维克】弹性策略:用“乖离率“捕捉超跌反弹
android·开发语言·python·深度学习·kotlin·量化
传奇开心果编程3 天前
【用案例学Material 3 Expressive】第1课:从一封邮件开始,感受安卓设计新语言的表现力
android·学习·ui·kotlin·android jetpack
mmsx3 天前
Android 状态保持:进程被杀、旋屏与后台任务的存活术
android·kotlin
传奇开心果编程3 天前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
花开路口4 天前
线程安全完全指南:从 Java 到 Kotlin,一文吃透并发编程
java·kotlin
hai_android4 天前
子 View 被压小时,如何向父容器"告状"?——MEASURED_STATE_TOO_SMALL 向上传递机制
android·kotlin·android jetpack
怪奇云呼军4 天前
从 ElevenLabs 看工具调用:闪电智能 Voice Agent 的企业集成验收设计
android·大数据·运维·服务器·网络·人工智能·kotlin