Функция windowed
Функция windowed создает список всех возможных окон
(подпоследовательностей) заданного размера из исходной коллекции.
Поддерживает настройку шага перемещения окна, а также возможность
частичного заполнения последнего окна. Применяется к строкам,
спискам и другим коллекциям.
Синтаксис
fun CharSequence.windowed(
size: Int,
step: Int = 1,
partialWindows: Boolean = false
): List<String>
fun <T> Iterable<T>.windowed(
size: Int,
step: Int = 1,
partialWindows: Boolean = false
): List<List<T>>
Параметры
size - размер окна (количество элементов в каждом окне);
step - шаг перемещения окна (по умолчанию 1);
partialWindows - разрешать ли частичные окна в конце последовательности (по умолчанию false).
Пример
Создадим окна размером 3 из строки "abcde":
val str = "abcde"
val res = str.windowed(3)
println(res)
Результат выполнения кода:
List<String> ["abc", "bcd", "cde"]
Пример
Используем шаг 2 для создания окон:
val str = "abcde"
val res = str.windowed(3, 2)
println(res)
Результат выполнения кода:
List<String> ["abc", "cde"]
Пример
Разрешим частичные окна в конце последовательности:
val str = "abcde"
val res = str.windowed(3, 2, true)
println(res)
Результат выполнения кода:
List<String> ["abc", "cde", "e"]
Пример
Использование с числовыми коллекциями:
val numbers = listOf(1, 2, 3, 4, 5)
val res = numbers.windowed(3)
println(res)
Результат выполнения кода:
List<List<Int>> [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
Пример
Применение преобразования к каждому окну:
val str = "abcde"
val res = str.windowed(3).map { it.uppercase() }
println(res)
Результат выполнения кода:
List<String> ["ABC", "BCD", "CDE"]