map

Devuelve un iterable perezoso con los valores que resultan de pasar cada elemento por una función.

Iterable<B> map<A, B>(B Function(A a) f, Iterable<A> iterable) FxAsyncIterable<B> mapAsync<A, B>(FutureOr<B> Function(A a) f, FxAsyncIterable<A> iterable) Fx<R> Fx.map<R>(R Function(T a) f) // chain FxAsync<R> FxAsync.map<R>(FutureOr<R> Function(T a) f)

Lección

map es el transformador más fundamental: aplica una función a cada elemento. En FxDart es perezoso — llamar a map no hace absolutamente nada de trabajo. La función solo se ejecuta cuando un operador terminal (toList, each, reduce, …) tira de los valores a través del pipeline. Eso significa que puedes hacer map sobre una secuencia enorme — incluso infinita — mientras solo pidas lo que necesitas.

Viene en forma data-first (map(f, iterable)) y como método de cadena (fx(iterable).map(f)). Ambas devuelven el mismo resultado perezoso.

Demo 1 · Fundamentos & pereza

Fíjate en que la función de mapeo solo se ejecuta para los 3 valores que take(3) pide — de un millón:

Demo 2 · Asíncrono, con concurrencia

mapAsync (o .toAsync().map(...)) acepta una función asíncrona. Por sí sola espera cada elemento en orden; añade concurrent(n) y aguas arriba se evalúan n elementos a la vez — los resultados siguen llegando en orden:

Pruébalo tú

Ejercicio: usa map para convertir esta lista de maps en una lista de nombres formateados como "KIM (32)".

Relacionado: mapEffect — igual que map, pero señala efectos secundarios · flatMap — map + aplanado · peek — observar sin transformar · concurrent — evaluación en paralelo