本文方法及代码示例基于Kotlin 2.1.20 Released
windowedSequence
所在包 kotlin.text.windowedSequence
,其相关用法介绍如下:
用法一
kotlin
fun CharSequence.windowedSequence(
size: Int,
step: Int = 1,
partialWindows: Boolean = false
): Sequence<String>
返回给定 size 的窗口的快照序列,沿此字符序列滑动给定的 step ,其中每个快照都是一个字符串。
最后几个字符串的字符数可能少于给定的 size 。
size 和 step 都必须为正数,并且可以大于此字符序列中的元素数。
示例代码:
kotlin
import kotlin.test.*
fun main(args: Array<String>) {
//sampleStart
val sequence = generateSequence(1) { it + 1 }
val windows = sequence.windowed(size = 5, step = 1)
println(windows.take(4).toList()) // [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8]]
val moreSparseWindows = sequence.windowed(size = 5, step = 3)
println(moreSparseWindows.take(4).toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10, 11], [10, 11, 12, 13, 14]]
val fullWindows = sequence.take(10).windowed(size = 5, step = 3)
println(fullWindows.toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8]]
val partialWindows = sequence.take(10).windowed(size = 5, step = 3, partialWindows = true)
println(partialWindows.toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10], [10]]
//sampleEnd
}
// 输出
[[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8]]
[[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10, 11], [10, 11, 12, 13, 14]]
[[1, 2, 3, 4, 5], [4, 5, 6, 7, 8]]
[[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10], [10]]
参数说明
size
- 每个窗口中的元素数量
step
- 每一步向前移动窗口的元素数,默认为 1
partialWindows
- 控制是否在最后保留部分窗口,如果有的话,默认情况下false
这意味着不会保留部分窗口
用法二
kotlin
fun <R> CharSequence.windowedSequence(
size: Int,
step: Int = 1,
partialWindows: Boolean = false,
transform: (CharSequence) -> R
): Sequence<R>
返回将给定的 transform 函数应用于每个字符序列的结果序列,该序列表示给定 size 的窗口上的视图,该窗口使用给定的 step 沿着该字符序列滑动。
请注意,传递给transform 函数的字符序列是短暂的,仅在该函数内部有效。您不应该存储它或让它以某种方式逃逸,除非您制作了它的快照。几个最后一个字符序列的字符可能比给定的 size 少。
size 和 step 都必须为正数,并且可以大于此字符序列中的元素数。
示例代码:
kotlin
import kotlin.test.*
fun main(args: Array<String>) {
//sampleStart
val dataPoints = sequenceOf(10, 15, 18, 25, 19, 21, 14, 8, 5)
val averaged = dataPoints.windowed(size = 4, step = 1, partialWindows = true) { window -> window.average() }
println(averaged.toList()) // [17.0, 19.25, 20.75, 19.75, 15.5, 12.0, 9.0, 6.5, 5.0]
val averagedNoPartialWindows = dataPoints.windowed(size = 4, step = 1).map { it.average() }
println(averagedNoPartialWindows.toList()) // [17.0, 19.25, 20.75, 19.75, 15.5, 12.0]
//sampleEnd
}
// 输出
[17.0, 19.25, 20.75, 19.75, 15.5, 12.0, 9.0, 6.5, 5.0]
[17.0, 19.25, 20.75, 19.75, 15.5, 12.0]
参数说明
size
- 每个窗口中的元素数量
step
- 每一步向前移动窗口的元素数,默认为 1
partialWindows
- 控制是否在最后保留部分窗口,如果有的话,默认情况下false
这意味着不会保留部分窗口
相关方法
- Kotlin contentToString用法及代码示例
- Kotlin dropWhile用法及代码示例
- Kotlin distinct用法及代码示例
- Kotlin code用法及代码示例
- Kotlin Map:mapOf()用法及代码示例
- Kotlin distinctBy用法及代码示例
- Kotlin digitToChar用法及代码示例
- Kotlin ifBlank用法及代码示例
- Kotlin all用法及代码示例
- Kotlin digitToIntOrNull用法及代码示例
- Kotlin dropLast用法及代码示例
- Kotlin dropLastWhile用法及代码示例
- Kotlin associateBy用法及代码示例
- Kotlin groupingBy用法及代码示例
- Kotlin groupBy用法及代码示例
- Kotlin getOrElse用法及代码示例
- Kotlin getOrPut用法及代码示例