distinctBy
Elimina duplicados según lo que determine una función de clave, en lugar de por igualdad de valores.
Lección
distinctBy es la forma general de uniq: en vez de
comparar los elementos enteros, pasa cada elemento por f y
conserva solo el primer elemento que produce cada clave distinta.
distinctBy es el nombre idiomático en Dart; fxdart también
acepta uniqBy, la grafía de FxTS: son el mismo operador. Es la
herramienta para «una fila por cliente», «un evento por tipo» o para
deduplicar por cualquier campo o valor calculado — el propio
uniq no es más que
distinctBy((a) => a, iterable).
Igual que uniq, es perezoso y conserva el orden: gana el primer
elemento de cada clave, y el Set<B> interno de claves
vistas solo crece a medida que tiras de los valores.
Aquí aplica la misma regla asíncrona que en uniq: pon la
concurrencia en un fetch anterior (.map(...).concurrent(n)) y
luego aplica distinctBy/distinctByAsync al flujo
ya resuelto y en orden.
Demo 1 · Fundamentos
Demo 2 · Asíncrono, con concurrencia aguas arriba
Pruébalo tú
Ejercicio: usa distinctBy para quedarte solo con el primer evento
de cada 'type'.
uniq — deduplica por igualdad de valores ·
differenceBy — elimina por una clave calculada frente a otro iterable ·
intersectionBy — conserva por una clave calculada compartida con otro iterable ·
groupBy — conserva todos los elementos, agrupados por clave