En esta lección, vamos a echar un vistazo en el soporte de transmisión en la biblioteca Java.utility. Vamos a echar un vistazo a la canalización, puntos terminales, filtrado, mapeo, agrupación reducir, ordenar estadísticas, y terminaremos viendo let. En esta lección en particular, vamos a echar un vistazo a los puntos finales de canalización y terminal. Así que si puedes ver el gráfico aquí, comenzamos con una fuente de flujo, que puede ser sobre cualquier cosa. Por lo general, es un tipo de colección, una lista, un mapa, una cola. Puede ser una matriz, un canal IO. Puede ser cualquier número de cosas. Y le pedimos a esa fuente de flujo que se presente como un flujo usando el método de flujo. En ese punto, Hay cualquier número de operaciones intermedias. que podemos realizar en la transmisión. Es posible que haya escuchado el término reducción de mapa o transformación de mapa. Es esa idea. Podemos filtrar, ordenar, convertir, mapear, muchas operaciones diferentes que consideramos que son estas operaciones intermedias, podemos llevar a cabo en esta corriente. Ahora, en realidad no pasa nada. hasta llegar a la operación terminal, que veremos podría ser, me gustaria la coleccion ya para ser presentado como una colección después de haber sido transformado y reducido y todo eso o tal vez solo un agregado, un conteo o una suma, o estadísticas como veremos. Así que lo primero que quiero hacer, solo para empezar un poco con la idea, tengo una coleccion aqui que pasa a ser una lista de frutas. Y puedes verlos aquí. Y lo que podríamos haber hecho antes de Streams habría sido el enfoque imperativo. Podríamos haber repasado la lista. Y en este caso, estamos buscando cada fruta que termina con la letra e. Así que manzana, sí, naranjas, no, piña, sí, y puedes ver Así que podríamos decir, si la fruta termina con la letra e luego agregue esa fruta en particular a la lista filtrada. Y luego ahí vamos. Al final, deberíamos terminar con manzana, piña., y, bueno, había dos manzanas aquí. Ahora usando Streams, es un poco más declarativo. Entonces podemos comenzar con la misma lista de frutas que tuvimos hace un momento. Y en este caso, vamos a pedirle a la colección, en este caso la lista, presentarse a nosotros como un Arroyo. En ese momento, podemos empezar a disparar. estas operaciones intermedias. Y aquí puedes ver que voy a usar el método de filtro. Voy a usar la expresión lambda aquí, tal que me gustaría filtrar la corriente incluir sólo aquellas frutas que terminen con la letra e. Y luego el operador de la terminal que ves aquí es recolectar lo que haya pasado por el filtro aquí, recopila esto en una lista. Y los estoy recibiendo en algo llamado lista filtrada. Entonces puedes ver que mi afirmación es la misma que era antes, excepto que no escribí ningún bucle o no hice ningún if o crear listas temporales o agregar a la lista temporal, nada de eso. Acabo de usar el soporte de transmisión y la programación declarativa. Así que puedes ver que fue muy eficiente. Podemos manejar cualquier tamaño de conjunto de elementos en la transmisión, muy eficiente en memoria. No pasó nada hasta que llegamos al punto final de la terminal. Y quiero echar un vistazo a un par de otras ideas aquí, uno en el que tengo una colección que tiene cientos de miles de puntos, geolocalizaciones, en el mismo. Y me gustaría hacer un par de cosas. Parece que, primero, Voy a leer todas las geolocalizaciones. Este tipo tiene 30.406 elementos. que me gustaria hacer ahora es, con esa misma colección de puntos de geolocalización, es convertirlo en un arroyo. En otras palabras, pídele que se me presente como un arroyo. Y luego voy a emitir este operador intermedio de filtro. Voy a filtrar solo las geolocalizaciones donde la población era mayor de 50,000 y luego recopilarlo en una lista. Así que pueden ver aquí que las poblaciones más grandes, solo había 951 geolocalizaciones de 30.406 que tenía más de 50.000 habitantes. Ahora la siguiente noción aquí abajo, hemos estado usando el .stream para convertir la colección, en este caso, en un flujo. Si tenemos cientos de miles o millones o decenas de millones de elementos en la corriente, podemos usar con la misma facilidad la operación ParalelStream. Y lo que hace es que se apaga para ver cuántos núcleos tienes, cuántos procesadores en la máquina, y creará debajo de la alfombra tantos subprocesos como núcleos haya en su plataforma. Y luego lo que hace es bifurcar/unirse O algo por el estilo tal que pueda salir y determinar ¿Cuántas poblaciones tienen más de 50,000 habitantes? utilizando tantos subprocesos como núcleos tenga en su máquina. Por lo tanto, permite cálculos paralelos muy fáciles. sin tener que preocuparse por subprocesos múltiples y haciendo todas estas cosas nosotros mismos. Y lo último que les voy a mostrar, Pensé que esto era interesante. Si te gustaría pinchar y ver cómo se ve en varios puntos a lo largo de su tubería, nos han dado un método de vistazo. Ahora, lo único que puedo entender sobre esto es que ponen esto aquí para los desarrolladores. Así que voy a filtrar mi flujo de frutas aquí, esas frutas que terminan con la letra e minúscula y luego el vistazo espera que le pases un consumidor. Así que mi consumidor es, voy a consumir los elementos que logró atravesar esta parte del filtro, a través de esta parte de la tubería e imprímalo. Y luego voy a mapear cualquier fruta que lo haya hecho. por ese filtro al nombre de la fruta en mayúsculas. Y puede ver que podemos poner estas operaciones de vistazo allí en cualquier número de lugares a lo largo de la tubería. Y luego, en última instancia, lo recopilo en una lista y puedes ver que lo que debería tener en el resultado final es MANZANA, PIÑA y MANZANA otra vez en mayúsculas, porque se filtró y se transformó o mapeó a la versión en mayúsculas. Así que agradezco que estés mirando. Muchas gracias.