En estas lecciones, veremos el procesamiento de flujos de objetos, comúnmente conocidos como sus elementos.
En estas lecciones, veremos el procesamiento de flujos de objetos, comúnmente conocidos como sus elementos. Un flujo puede tener un tamaño limitado o infinito con respecto a su número de elementos, y se puede obtener de muchas fuentes, o incluso de generadores disponibles en el lenguaje de programación Java. Repasaremos cómo lidiar con flujos muy grandes utilizando el procesamiento paralelo, mediante el cual todos los núcleos disponibles en su máquina participan en el procesamiento de flujos.
Aprenderá lo fácil que es combinar sus conocimientos del marco de trabajo de las colecciones, la programación funcional y las expresiones lambda para crear tuberías declarativas, capaces de abordar la miríada de problemas que se enfrentan diariamente en el desarrollo de software. Desde el filtrado de elementos de un flujo hasta el mapeo de los elementos a un tipo completamente diferente, el procesamiento de flujos puede hacer que la resolución de problemas sea muy fácil. Terminaremos aplicando límites, estadísticas, ordenando, mejorando y reduciendo un flujo a lo que sea que necesitemos para producir resultados para los clientes.
Objetivos de aprendizaje:
- Describe qué es un flujo y dónde puede encontrarlo
- Explicar cómo construir tuberías lógicas de expresiones lambda
- Identificar cómo producir estadísticas a partir de un flujo
- Comprender el procesamiento de órdenes y límites
Habilidades que obtendrás
Transmisión de aplicacionesJava 11Java (lenguaje de programación)Java 8Procesadores de flujosProcesamiento de flujosLo que aprenderás
- Describir qué es un stream y dónde se pueden encontrar u obtener streams
- Construir pipelines lógicos y declarativos usando expresiones lambda y puntos de pipeline y terminal
- Aplicar operaciones de filtrado, mapeo, agrupación y reducción a elementos de stream
- Producir estadísticas de un stream y procesar ordenamiento y límites
- Usar procesamiento paralelo para manejar streams muy grandes en todos los núcleos disponibles
- Combinar el marco de colecciones, la programación funcional y las expresiones lambda para resolver problemas
Puntos clave
- Un stream procesa una secuencia de objetos (elementos) y puede ser de tamaño limitado o infinito, obtenido de muchas fuentes o generadores en Java.
- El procesamiento de streams admite procesamiento paralelo, permitiendo que todos los núcleos disponibles de una máquina participen al manejar streams muy grandes.
- Los pipelines declarativos se construyen combinando el marco de colecciones, la programación funcional y las expresiones lambda.
- Las operaciones comunes de stream incluyen filtrado de elementos, mapeo de elementos a un tipo diferente, agrupación y reducción.
- Los streams pueden refinarse aún más aplicando límites, estadísticas, ordenamiento, mejora y reducción para producir resultados finales.
Preguntas frecuentes
¿Qué cubre este curso?
Cubre el procesamiento de streams de objetos en Java, incluyendo la construcción de pipelines con puntos de pipeline y terminal; filtrado, mapeo, agrupación y reducción de elementos; y trabajo con orden, estadísticas y límites. También cubre el uso de procesamiento paralelo para streams muy grandes.
¿Qué habilidades adquiriré en este curso?
El curso se enfoca en aplicaciones de streaming, Java 8, Java 11, procesadores de stream y procesamiento de streams en el lenguaje de programación Java.
¿Cubre este curso el manejo de streams muy grandes?
Sí. Explica cómo manejar streams muy grandes usando procesamiento paralelo, mediante el cual todos los núcleos disponibles en su máquina participan en el procesamiento de streams.
¿Sobre qué conocimiento se construye el curso?
Se construye sobre y combina su conocimiento del marco de colecciones, la programación funcional y las expresiones lambda para crear pipelines declarativos.
¿Qué temas se enseñan en las lecciones?
Las lecciones cubren Puntos de Pipeline y Terminal; Filtrado, Mapeo, Agrupación y Reducción; y Ordenamiento, Estadísticas y Límites.
Transcripción
Transcripción
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.
Aprende sobre la marcha
Lleva tu aprendizaje a todas partes: la app de KnowledgeCity te permite ver las lecciones sobre la marcha.