minBy

El elemento cuya clave es la más pequeña — una sola pasada, sin ordenar, null cuando está vacío.

A? minBy<A>(Object? Function(A a) f, Iterable<A> iterable) Future<A?> minByAsync<A>(Object? Function(A a) f, FxAsyncIterable<A> iterable) T? Fx<T>.minBy(Object? Function(T a) f) // chain (sync) Future<T?> FxAsync<T>.minBy(Object? Function(T a) f) // chain (async)

Lección

minBy es la imagen especular de maxBy: devuelve el elemento con la clave más pequeña tras una única pasada O(n), mientras que sortBy(key).head() ordenaría el pipeline entero solo para leer un valor.

El contrato coincide exactamente con el de maxBy: las claves se comparan como en sortBy (Comparable.compare), los empates los gana el primer elemento encontrado, y un pipeline vacío devuelve null — no infinity, que es lo que hace el min numérico, porque aquí no hay ningún «elemento cero» al que recurrir.

Demo 1 · Fundamentos, caso vacío & empates

Demo 2 · Asíncrono

Pruébalo tú

Ejercicio: encuentra al corredor más rápido con una sola llamada.

Relacionado: maxBy — la imagen especular · min — cuando quieres la clave en sí, no el elemento · head — el mismo contrato con nulls