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

相关推荐
冬奇Lab17 小时前
【Kotlin系列08】泛型进阶:从型变到具体化类型参数的类型安全之旅
android·开发语言·windows·安全·kotlin
zh_xuan18 小时前
kotlin 尾随Lambda表达式函数的常用简写
开发语言·kotlin
zh_xuan1 天前
kotlin对集合数据的操作
开发语言·kotlin
zh_xuan1 天前
kotlin函数的一些用法
开发语言·kotlin
aqi002 天前
FFmpeg开发笔记(九十九)基于Kotlin的国产开源播放器DKVideoPlayer
android·ffmpeg·kotlin·音视频·直播·流媒体
移幻漂流2 天前
Kotlin与Java共生之道:解密互操作底层原理与最佳实践
java·python·kotlin
低调小一2 天前
Kotlin Multiplatform + 声明式 UI 三端实战:从工程结构到鸿蒙适配
ui·kotlin·harmonyos
冬奇Lab2 天前
【Kotlin系列07】类型系统深度解析:从空安全到智能类型推断的设计哲学
android·开发语言·安全·kotlin
赛恩斯2 天前
kotlin 为什么可以在没有kotlin 环境的安卓系统上运行的
android·开发语言·kotlin