kotlin:sequence在有take时会提前终止处理

一,sequence有take时

代码:

        //处理按钮点击事件
        binding.button3.setOnClickListener {
            val list1 = (1..1000)
                .asSequence()
                .filter {
                    println("filter: ${it}")
                    it % 2 == 0
                }
                .map {
                    println("map: ${it}")
                    it * 2
                }
                .take(3) // 只处理到找到 3 个元素为止
                .toList()
            println("最终结果:"+list1)
        }

运行结果:

image

二,list有take时

代码:


        //处理按钮点击事件
        binding.button4.setOnClickListener {
            val list1 = (1..1000)
                .filter {   // 执行1000次,找到500个偶数
                    println("filter: ${it}")
                    it % 2 == 0
                }
                .map {     // 执行500次,各剩以2
                    println("map: ${it}")
                    it * 2
                }
                .take(3)         // 取前3个
                .toList()
            println("最终结果:"+list1)
        }

运行结果: filter和map中代码分别执行了1000次和500次

image

三,总结:

当使用 take(n)first() 等操作时,Sequence 会在满足条件后立即终止处理,避免不必要的计算

普通集合会先处理全部的 100 万元素,而 Sequence 可能仅处理到第 6 个元素(找到 3 个偶数后停止)

posted @ 2025-08-09 18:21  刘宏缔的架构森林  阅读(7)  评论(0)    收藏  举报