Te doy la bienvenida a nuestro espacio, ahora vas a hallar la solucíon de lo que buscas.
Solución:
Un flujo admite varias operaciones y estas operaciones se dividen en intermediate
y terminal
operaciones.
La distinción entre estas operaciones es que una operación intermedia es perezosa mientras que una operación terminal no lo es. Cuando invoca una operación intermedia en una secuencia, la operación no se ejecuta inmediatamente. Se ejecuta solo cuando se invoca una operación de terminal en ese flujo. En cierto modo, una operación intermedia se memoriza y se recupera tan pronto como se invoca una operación terminal. Puede encadenar múltiples operaciones intermedias y ninguna de ellas hará nada hasta que invoque una operación de terminal. En ese momento, todas las operaciones intermedias que invocó anteriormente se invocarán junto con la operación de terminal.
Todas las operaciones intermedias devuelven Stream (se pueden encadenar), mientras que las operaciones de terminal no lo hacen. Las operaciones intermedias son:
filter(Predicate)
map(Function)
flatMap(Function)
sorted(Comparator)
peek(Consumer)
distinct()
limit(long n)
skip(long n)
Las operaciones de terminal producen un resultado que no es de flujo (no se puede encadenar), como un valor primitivo, una colección o ningún valor.
Las operaciones de la terminal son:
forEach
forEachOrdered
toArray
reduce
collect
min
max
count
anyMatch
allMatch
noneMatch
findFirst
findAny
Los últimos 5 son operaciones de terminales en cortocircuito.
Según javadoc:
- Operación intermedia transformará un flujo en otro flujo, como
map(MapperFn)
ofilter(Predicate)
- Operación de terminales producirá un resultado o efecto secundario, como
count()
oforEach(Consumer)
Tenga en cuenta que todas las operaciones intermedias NO ejecutarse sin una operación de terminal al final. Entonces el patrón será:
stream()
.intemediateOperation1()
.intemediateOperation2()
...
.intemediateOperationN()
.terminalOperation();
Terminal significa finalizar el proceso, como recopilar un flujo en una lista o agregar un flujo de valores.
Intermedio como en la transición a un nuevo estado, en el camino a una operación terminal