kotlin: flow:中间操作符的位置

一,代码:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
            runBlocking {

                flow {                  // 上游,发源地
                    emit(1)             // 挂起函数
                    emit(2)
                    emit(3)
                    emit(4)
                    emit(5)
                }.filter {
                        println("filter: $it")
                        it > 2
                    }     // 中转站1
                    .map { it * 2 }     // 中转站2
                    .take(2)            // 中转站3
                    .collect{           // 下游
                        println("collect: $it")
                    }
            }
        }


        //处理按钮点击事件
        binding.button2.setOnClickListener {
            runBlocking {
                flowOf(1, 2, 3, 4, 5)
                    .take(2) // 注意这里
                    .filter {
                        println("filter: $it")
                        it > 2
                    }
                    .map {
                        println("map: $it")
                        it * 2
                    }
                    .onStart { println("onStart") }
                    .collect {
                        println("collect: $it")
                    }
            }
        }

说明:

相比第一个按钮的点击, take(2) 的位置挪到了上游的起始位置,
因为1、2这两个数字都不满足filter的要求,
所以到collect这一步时就打印不出来数据了

二,运行结果:

第一个按钮点击

image

第二个按钮点击

image

posted @ 2025-08-02 15:00  刘宏缔的架构森林  阅读(6)  评论(0)    收藏  举报