indexBy
Indexa cada elemento por una clave calculada en un Map<K, A> — gana el último duplicado.
Lección
indexBy es el hermano de
groupBy: la misma idea — tirar de
todo el pipeline y calcular una clave por elemento — pero en vez de
reunir una lista por clave, guarda exactamente
un valor por clave: Map<K, A> en lugar
de Map<K, List<A>>.
Eso significa que los duplicados no se acumulan: se sobrescriben. Si dos
elementos producen la misma clave, el que se procese en
último lugar (es decir, el que aparece después en el
iterable) es el que queda en el map. Es el comportamiento natural de ir
haciendo result[key(a)] = a mientras se avanza, y coincide
con FxTS. Recurre a indexBy precisamente cuando sepas que las
claves deben ser únicas (como un ID de base de datos) y quieres una
búsqueda directa O(1) en vez de una lista en la que tendrías
que buscar.
Si de verdad esperas claves duplicadas y quieres conservar todos los
valores, usa groupBy en su lugar — nunca descarta nada.
Demo 1 · Fundamentos & gana el último
Demo 2 · Asíncrono
Pruébalo tú
Ejercicio: indexa los usuarios por su id, para poder buscar uno directamente.
groupBy — conserva todos los duplicados en lugar de sobrescribirlos ·
countBy — cuenta en vez de conservar el valor ·
fromEntries — construye un Map directamente a partir de pares clave/valor