intersection

Lo contrario de difference: los elementos del segundo iterable que SÍ aparecen en el primero.

Iterable<A> intersection<A>(Iterable<A> iterable1, Iterable<A> iterable2) FxAsyncIterable<A> intersectionAsync<A>(FxAsyncIterable<A> iterable1, FxAsyncIterable<A> iterable2) Fx<T> Fx<T>.intersection(Iterable<T> other) // chain: values of the chain also in other

Lección

intersection(iterable1, iterable2) comparte la convención de orden de argumentos de difference: el resultado recorre iterable2 y conserva cada elemento (en el orden de iterable2, sin duplicados) que se encuentre en iterable1. iterable1 se usa únicamente como conjunto de pertenencia — si intercambias los dos argumentos obtienes los mismos valores en el sentido de la teoría de conjuntos, pero el orden real (y de qué colección se colapsan los duplicados) es distinto, porque cambia la fuente de los elementos emitidos. Mira la Demo 1.

Por dentro es intersectionBy((a) => a, iterable1, iterable2) — recurre directamente a intersectionBy cuando necesites emparejar por una clave calculada entre dos listas de registros completos en vez de por igualdad de valor.

No hay método de cadena; llama a la función data-first. En el lado asíncrono, el marcador de concurrencia de .concurrent(n) se aplica a iterable2iterable1 se consume por completo de antemano para construir el conjunto de pertenencia.

Demo 1 · Fundamentos & orden de los argumentos

Demo 2 · Asíncrono, con concurrencia

Pruébalo tú

Ejercicio: usa intersection para averiguar cuáles de las habilidades del candidato son realmente necesarias.

Relacionado: difference — la contraparte de exclusión · intersectionBy — empareja por una clave calculada en su lugar · uniq — elimina duplicados de un solo iterable · includes — comprueba la pertenencia de un único valor