windowed
Ventanas deslizantes de size elementos consecutivos, cada una empezando step elementos después de la anterior.
Lección
chunk corta una secuencia en
piezas sin solape. En cuanto las piezas deben solaparse —
una media móvil, «tres lecturas consecutivas por encima del límite»,
cualquier pregunta de cada-elemento-con-sus-vecinos — acabas
escribiendo a mano un bucle con índices y límites delicados.
windowed(size) es ese bucle como operador perezoso:
produce una List con cada grupo de size
elementos consecutivos, deslizándose hacia delante step
posiciones (1 por defecto) entre ventanas.
Dos perillas cubren toda la familia. step espacia las
ventanas: step < size las solapa,
step == size las hace encajar exactamente como
chunk, y step > size muestrea
dejando huecos. partial: true conserva las ventanas
más cortas del final en lugar de descartarlas — de hecho
chunk(n) es
windowed(n, step: n, partial: true); comparten
una única implementación.
Extensión de fxdart (sin contraparte en FxTS) — llamada como el
windowed de Kotlin; quienes vengan de RxDart lo conocen
como bufferCount(size, startEvery). Es perezoso como
todos los operadores de fxdart: las ventanas se materializan pull a
pull, así que compone con fuentes inagotables y con
concurrent.
Demo 1 · Media móvil
Demo 2 · Las perillas step y partial
Pruébalo tú
Ejercicio: marca tres días consecutivos por encima del límite de gasto.