where

Devuelve un iterable perezoso con los elementos para los que el predicado devuelve true.

Iterable<A> where<A>(bool Function(A a) f, Iterable<A> iterable) FxAsyncIterable<A> whereAsync<A>(FutureOr<bool> Function(A a) f, FxAsyncIterable<A> iterable) Fx<T> Fx.where(bool Function(T a) f) // chain FxAsync<T> FxAsync.where(FutureOr<bool> Function(T a) f) Iterable<A> filter<A>(bool Function(A a) f, Iterable<A> iterable) // FxTS alias

Lección

where es el otro transformador fundamental junto a map: conserva todos los elementos para los que el predicado devuelve true y descarta el resto, de forma perezosa. No se ejecuta nada hasta que un operador terminal tira de los valores. where es el nombre idiomático en Dart; fxdart también acepta la grafía filter de FxTS: son el mismo operador.

Al ser perezoso, combinar where con take evalúa solo las llamadas al predicado necesarias para satisfacer el take — mira la Demo 1.

whereAsync tiene su propia implementación concurrente (en vez de reutilizar la de mapAsync): cuando le añades .concurrent(n), se evalúan n predicados en paralelo, pero los elementos que pasan se emiten aguas abajo en su orden original — la concurrencia cambia el rendimiento, nunca el resultado.

Demo 1 · Fundamentos & pereza

Demo 2 · Asíncrono, con concurrencia

Pruébalo tú

Ejercicio: usa where para conservar solo las edades de 18 en adelante.

Relacionado: reject — lo contrario de filter · compact — descarta los null · map — transforma en vez de conservar/descartar · concurrent — evaluación en paralelo