sumBy

Suma una clave de todos los elementos — map + sum en un solo paso, 0 cuando está vacío.

num sumBy<A>(num Function(A a) f, Iterable<A> iterable) Future<num> sumByAsync<A>(FutureOr<num> Function(A a) f, FxAsyncIterable<A> iterable) num Fx<T>.sumBy(num Function(T a) f) // chain (sync) Future<num> FxAsync<T>.sumBy(FutureOr<num> Function(T a) f) // chain (async)

Lección

sumBy condensa la cola de dos etapas más habitual de los pipelines de datos — .map((x) => x.field).sum() — en un único terminal. Va plegando un total acumulado mientras extrae la clave, así que no se materializa nada intermedio y la intención («totaliza este campo») es una sola llamada en lugar de una proyección más una agregación.

El contrato es el de sum: un pipeline vacío suma 0, y las claves int mantienen la aritmética entera mientras que cualquier clave double promociona el total a double.

Es un añadido nativo de Dart (FxTS solo trae el sum numérico), de la misma familia que maxBy / minBy — Kotlin lo llama sumOf.

Demo 1 · Fundamentos & el caso vacío

Demo 2 · Claves asíncronas

Pruébalo tú

Ejercicio: totaliza con una sola llamada las longitudes de las palabras largas.

Relacionado: sum — cuando el pipeline ya contiene números · maxBy · minBy — la misma familia por clave · fold — la forma general que esto especializa