windowed Sequence
Начиная с Kotlin: 1.2
fun CharSequence.windowedSequence(size: Int, step: Int = 1, partialWindows: Boolean = false): Sequence<String>
Возвращает последовательность снимков окна заданного размера, скользящего по этой символьной последовательности с заданным шагом, где каждый снимок является строкой.
Некоторые последние строки могут содержать меньше символов, чем заданный размер.
И размер, и шаг должны быть положительными и могут превышать количество элементов в этой символьной последовательности.
Параметры
количество элементов, которые нужно взять в каждом окне
количество элементов, на которое нужно сдвигать окно на каждом шаге; по умолчанию — 1
определяет, сохранять ли неполные окна в конце, если они есть; по умолчанию false, то есть неполные окна не сохраняются
Примеры
import kotlin.test.*
fun main() {
//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
}
fun <R> CharSequence.windowedSequence(size: Int, step: Int = 1, partialWindows: Boolean = false, transform: (CharSequence) -> R): Sequence<R>
Возвращает последовательность результатов применения заданной функции transform к каждой символьной последовательности, представляющей собой представление окна заданного размера, скользящего по этой символьной последовательности с заданным шагом.
Обратите внимание, что символьная последовательность, передаваемая функции transform, является временной и действительна только внутри этой функции. Не следует сохранять её или каким-либо образом использовать за пределами функции, если только вы не создали её снимок. Некоторые последние символьные последовательности могут содержать меньше символов, чем заданный размер.
И размер, и шаг должны быть положительными и могут превышать количество элементов в этой символьной последовательности.
Параметры
количество элементов, которые нужно взять в каждом окне
количество элементов, на которое нужно сдвигать окно на каждом шаге; по умолчанию — 1
определяет, сохранять ли неполные окна в конце, если они есть; по умолчанию false, то есть неполные окна не сохраняются
Примеры
import kotlin.test.*
fun main() {
//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
}
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.text/windowed-sequence.html