partition
Divide un pipeline en dos listas de una sola vez, con un único predicado.
Lección
partition es un operador terminal que recorre el pipeline
una sola vez y reparte cada elemento en una de dos listas según un
predicado: los elementos para los que el predicado devuelve
true van a la primera lista, y todo lo demás a la segunda.
Equivale a llamar por separado a
filter y
reject, pero en una sola pasada
sobre los datos.
FxTS devuelve una tupla de dos elementos, [pass, fail]. Dart
no tiene un tipo tupla integrado al estilo de los arrays de JS, así que
FxDart usa un record nativo de Dart:
(List<A>, List<A>). Accede a las dos listas con
.$1 (los que pasan) y .$2 (los que no), o
desestructúralas directamente con la sintaxis de patrones:
final (pass, fail) = partition(f, iterable);. Es la misma
convención de tupla a record que usan
zip y
entries en el resto de FxDart.
Como todos los terminales de esta sección, tira de todo el pipeline perezoso que tenga aguas arriba, sea síncrono o asíncrono.
Demo 1 · Fundamentos y desestructuración
Demo 2 · Asíncrono
Pruébalo tú
Ejercicio: reparte las notas en aprobadas (>= 60) y suspensas (< 60).