intersectionBy

intersection, comparando por una clave calculada en vez de por igualdad de valor.

Iterable<A> intersectionBy<A, B>(B Function(A a) f, Iterable<A> iterable1, Iterable<A> iterable2) FxAsyncIterable<A> intersectionByAsync<A, B>(FutureOr<B> Function(A a) f, FxAsyncIterable<A> iterable1, FxAsyncIterable<A> iterable2) Fx<T> Fx<T>.intersectionBy<B>(B Function(T a) f, Iterable<T> other) // chain: values of the chain keyed in other

Lección

La misma forma que differenceBy, con la condición opuesta: intersectionBy(f, iterable1, iterable2) recorre iterable2 y conserva cada elemento cuya clave f aparezca entre las claves f de iterable1, sin duplicados según esa clave. f se aplica a ambos iterables, así que los dos deben compartir el mismo tipo de elemento A — solo el tipo de la clave de comparación B puede diferir de A.

Es la opción natural para dos listas de registros completos que comparten un campo identificador: una lista de SKUs «destacados» y un catálogo de productos, una lista de IDs de usuarios activos y una lista de objetos de usuario completos, y así sucesivamente. intersection no es más que intersectionBy((a) => a, iterable1, iterable2).

No existe método de cadena; llama a la función data-first o a su contraparte asíncrona. El marcador de concurrencia de .concurrent(n) se aplica a iterable2, exactamente igual que con intersectionAsync.

Demo 1 · Fundamentos

Demo 2 · Asíncrono, con concurrencia

Pruébalo tú

Ejercicio: usa intersectionBy (con la clave 'sku') para encontrar los productos que están en oferta.

Relacionado: intersection — la versión por igualdad de valor · differenceBy — excluye por una clave calculada compartida en su lugar · uniqBy — elimina duplicados de un solo iterable por clave · compress — filtra con una máscara booleana paralela