consume
Tira de los valores a través de una cadena y los descarta — solo por sus efectos secundarios, con tope opcional.
Lección
consume es el operador terminal mínimo: tira de los valores a
través de la cadena — ejecutando por sus efectos secundarios los pasos
peek o mapEffect que haya aguas arriba — pero
descarta cada valor en lugar de recopilarlo o reenviarlo. Recurre a él
cuando todo el sentido de un pipeline son sus efectos secundarios y
construir una List con toList sería tan solo
reservar memoria para nada.
El n opcional lo convierte en la pareja natural de las fuentes
infinitas o enormes: consume(5) tira exactamente de 5 valores y
se detiene, aunque el iterable subyacente (range sin límite,
cycle, repeat con una cuenta enorme) siguiera
indefinidamente. Omite n para vaciar por completo un iterable
finito.
consumeAsync (o .consume() sobre una cadena
FxAsync) funciona igual, esperando por turno los efectos
secundarios de cada valor del que tira — práctico para forzar que un
pipeline asíncrono de peek/logging se ejecute de verdad sin
pagar el coste de recopilar una lista de resultados que ibas a tirar de
todos modos.
Demo 1 · Acotar una fuente infinita
range(1000000) normalmente no terminaría nunca si se consumiera
entero — pero consume(5) se para tras 5 elementos:
Demo 2 · Efectos secundarios asíncronos, sin lista de resultados
Pruébalo tú
Ejercicio: consume solo los 3 primeros valores de un repeat()
prácticamente infinito, registrando cada uno conforme se tira de él.