kotlin: windowed函数,滑动窗口

一,功能

windowed() 函数从集合中获取所有可能的固定大小子区间(窗口),相比 chunked(),这个函数更灵活。

参数说明:

  • size:窗口大小,即每个子列表的元素个数。

  • step:滑动步长,表示每个窗口之间第一个元素的间隔,默认为1。

  • partialWindows:是否保留末尾不足窗口大小的子集,默认为 false。

你也可以传入 lambda 表达式对每个窗口进行处理。

二,例子

代码:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
            val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

            // 窗口大小为3,步长为1(默认)
            println(list.windowed(3))
            // 输出:[[1, 2, 3], [2, 3, 4], ..., [8, 9, 10]]

            // 窗口大小为3,步长为3
            println(list.windowed(3, 3))
            // 输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

            // 步长为4,partialWindows = false
            println(list.windowed(3, 4, false))
            // 输出:[[1, 2, 3], [5, 6, 7]]

            // 步长为4,partialWindows = true
            println(list.windowed(3, 4, true))
            // 输出:[[1, 2, 3], [5, 6, 7], [9, 10]]

            // 窗口求和
            println(list.windowed(3, 4, true) { it.sum() })
            // 输出:[6, 18, 19]
        }

运行结果:

image

三,例子

代码:

        //处理按钮点击事件
        binding.button2.setOnClickListener {
            //定义一个字符串数组
            val test = listOf("AA", "AB", "CC", "DD", "EE", "GF", "GG","HH")
            // 将元素按照指定宽带,列出所有的组成方法
            println(test.windowed(3))
            //[[AA, AB, CC], [AB, CC, DD], [CC, DD, EE], [DD, EE, GF], [EE, GF, GG], [GF, GG, HH]]

            // 将元素按照指定宽带,列出所有的组成方法,step = 2
            println(test.windowed(3,step = 2))
            //[[AA, AB, CC], [CC, DD, EE], [EE, GF, GG]]

            // 将元素按照指定宽带,列出所有的组成方法,partialWindows = true
            println(test.windowed(3,step = 2,partialWindows = true))
            //[[AA, AB, CC], [CC, DD, EE], [EE, GF, GG], [GG, HH]]
        }

运行结果:

image

 

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