distinct
Elimina los valores duplicados, quedándose con la primera aparición de cada uno y conservando el orden.
Lección
distinct recorre el iterable una sola vez, manteniendo un
Set con los valores ya vistos, y emite cada elemento únicamente
la primera vez que aparece. distinct es el nombre idiomático en
Dart; fxdart también acepta uniq, la grafía de FxTS: son el
mismo operador. Está implementado como
uniqBy((a) => a, iterable) —con la clave identidad—, así que
si alguna vez necesitas deduplicar por algo que no sea la igualdad del valor
completo, recurre a
uniqBy en su lugar.
Es perezoso y en streaming: el Set solo crece a medida que se
piden elementos, así que nunca almacena la fuente entera por adelantado. El
orden se conserva: lo que sobrevive es la primera aparición de un valor, no
la última.
En el lado asíncrono, distinctAsync se puede combinar sin riesgo
con .concurrent(n) siempre que la concurrencia viva en una etapa
de fetch anterior: primero descarga con .map(...).concurrent(n) y
luego aplica .distinct() a los resultados ya resueltos y en
orden, como en la Demo 2.
Demo 1 · Fundamentos
Demo 2 · Asíncrono, con concurrencia aguas arriba
Pruébalo tú
Ejercicio: usa distinct para eliminar las etiquetas duplicadas,
conservando el orden de primera aparición.
uniqBy — deduplica por una clave calculada ·
difference — elimina los elementos presentes en otro iterable ·
intersection — conserva solo los elementos comunes ·
compact — descarta los null