pairwise
Cada elemento emparejado con su sucesor: [a, b, c] se convierte en ((a, b), (b, c)).
Lección
«¿Cuánto cambió?» necesita dos elementos a la vez — el
anterior y el actual — y un map
normal solo ve uno. Los apaños habituales son un bucle con índices
(list[i - 1], con su riesgo de descuadre
incluido) o hacer zip de una lista consigo misma desplazada en uno.
pairwise() es esa idea como operador: produce registros
(anterior, actual), perezosamente, con
n − 1 pares para n elementos. Con menos de
dos elementos no produce nada — no hay par que formar.
Los campos del registro mantienen ambos lados al alcance:
p.$2 - p.$1 es el delta,
p.$2.compareTo(p.$1) la dirección. Es exactamente
windowed(2) con registros
tipados en lugar de listas de dos elementos — recurre a
windowed cuando el vecindario crezca más allá de dos.
Extensión de fxdart (sin contraparte en FxTS), inspirada en el
pairwise de RxDart. La forma async no computa nada hasta
que se le pide y compone con
concurrent.
Demo 1 · Deltas entre lecturas
Demo 2 · Dirección del cambio
Pruébalo tú
Ejercicio: encuentra los huecos en una secuencia de timestamps.