kotlin: sequence的四个特点

一,四个特点:

终端操作才会执行整个操作链: 如果不调用终端操作(如 toList、forEach),则不会执行任何操作;
Sequence 通常是一次性的: 终端操作后不能再次使用,避免重复使用同一 Sequence;
不缓存结果: Sequence 每次遍历都会重新计算,若需复用结果,应先转换为集合(如 toList());
不适合随机访问: Sequence 本质是单向遍历的数据流,不支持 get(index) 操作;

说明:

Sequence 有中间操作和终端操作,如下。

中间操作:每次操作返回一个新的 Sequence 对象
            (主要操作有:filter、distinct、drop、take、sorted、sortedDescending、map、mapIndexed、minus 等)。
终端操作:每次操作返回一个值或集合,每个序列只能进行一次终端操作
           (主要操作有:forEach、joinToString、min、max、count、sum、average、any、first、last、reduce 等)。

二,例子:有终端操作时,代码才会被执行

代码:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
                //从现有集合转换
                val list = listOf(1, 2, 3, 4)
                val seq1 = list.asSequence()
                println("seq1")
                //没有终端操作,map中代码不会被执行
                seq1.map{
                    println("map1当前数字:"+it)
                    it*2
                }
                //有终端操作,map中代码会被执行
                seq1.map{
                    println("map2当前数字:"+it)
                    it*2
                }.forEach {
                    println(it)
                }
                //原sequence中的数据未改变
                println(seq1.toList())
        }

运行结果:

image

三,例子:保存结果到list

代码:

        //处理按钮点击事件
        binding.button2.setOnClickListener {
            runBlocking {
                //使用 sequenceOf 函数
                val seq2 = sequenceOf(1, 2, 3, 4)
                //保存到list
                val list2 = seq2.map{
                    println("map2当前数字:"+it)
                    it*2
                }.toList()
                //seq2中的数据没改变
                println("seq2")
                seq2.forEach(::println)
                //list2中保存了处理过的数据
                println("list2:"+list2)
            }
        }

运行结果:

image

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