Este documento presenta una introducción a las expresiones lambda y al Stream API en Java 8. Explica conceptos clave como funciones como valores, interfaces funcionales, inferencia de tipos, alcance de variables, métodos de referencia y creación de streams. También describe operaciones comunes de los streams como map, filter y reduce. El objetivo es mostrar las nuevas características de Java 8 para programación funcional y procesamiento paralelo de colecciones.
Lambdas y API Stream - Apuntes de JavaAlexis Lopez
Este documento presenta el uso de expresiones lambda en Java para filtrar listas de manzanas según criterios como color y peso. Inicialmente se muestran métodos para filtrar por cada criterio de forma independiente, lo que resulta en código repetitivo. Luego se introducen predicados y expresiones lambda para parametrizar el comportamiento de filtrado de una manera más genérica y concisa. Finalmente, se explican conceptos como inferencia de tipos, alcance y métodos de referencia para referirse a métodos de manera más compacta.
Este documento proporciona una introducción a PHP, incluyendo una breve historia del lenguaje, sus características principales como lenguaje de script del lado del servidor, y ejemplos de páginas web estáticas y dinámicas. También explica los requisitos para programar en PHP y los pasos para instalar entornos de desarrollo como XAMPP, LAMPP y NetBeans.
Este documento describe la simbología utilizada en el software de diagramas de flujo Raptor. Incluye símbolos como asignación, llamada, entrada, salida, selección y ciclo, los cuales se utilizan para cambiar valores de variables, llamar agentes externos, pedir entrada, mostrar salida, tomar decisiones y repetir secuencias. También describe la interfaz del software, la cual incluye pantallas para el proceso y su ejecución, así como botones para reproducir, pausar, detener y avanzar por el diagrama.
El documento habla sobre los principios básicos de la programación y los lenguajes de programación. Define algoritmo, características de un algoritmo y partes de un algoritmo. Explica que los lenguajes de programación permiten convertir algoritmos en instrucciones entendibles para la máquina. Clasifica los lenguajes de programación y describe ejemplos de lenguajes de cada generación.
Este documento describe los procedimientos en Visual Basic, incluyendo cómo crear procedimientos Sub y Function, cómo declarar y pasar argumentos, y cómo utilizar valores de retorno y argumentos opcionales. Además, explica cómo los procedimientos permiten la reutilización de código.
El documento describe las características básicas del lenguaje de programación Pascal, incluyendo la estructura de un programa Pascal, palabras reservadas, tipos de datos, funciones para entrada y salida de datos, operadores aritméticos, y sentencias de control condicionales.
Lambdas y API Stream - Apuntes de JavaAlexis Lopez
Este documento presenta el uso de expresiones lambda en Java para filtrar listas de manzanas según criterios como color y peso. Inicialmente se muestran métodos para filtrar por cada criterio de forma independiente, lo que resulta en código repetitivo. Luego se introducen predicados y expresiones lambda para parametrizar el comportamiento de filtrado de una manera más genérica y concisa. Finalmente, se explican conceptos como inferencia de tipos, alcance y métodos de referencia para referirse a métodos de manera más compacta.
Este documento proporciona una introducción a PHP, incluyendo una breve historia del lenguaje, sus características principales como lenguaje de script del lado del servidor, y ejemplos de páginas web estáticas y dinámicas. También explica los requisitos para programar en PHP y los pasos para instalar entornos de desarrollo como XAMPP, LAMPP y NetBeans.
Este documento describe la simbología utilizada en el software de diagramas de flujo Raptor. Incluye símbolos como asignación, llamada, entrada, salida, selección y ciclo, los cuales se utilizan para cambiar valores de variables, llamar agentes externos, pedir entrada, mostrar salida, tomar decisiones y repetir secuencias. También describe la interfaz del software, la cual incluye pantallas para el proceso y su ejecución, así como botones para reproducir, pausar, detener y avanzar por el diagrama.
El documento habla sobre los principios básicos de la programación y los lenguajes de programación. Define algoritmo, características de un algoritmo y partes de un algoritmo. Explica que los lenguajes de programación permiten convertir algoritmos en instrucciones entendibles para la máquina. Clasifica los lenguajes de programación y describe ejemplos de lenguajes de cada generación.
Este documento describe los procedimientos en Visual Basic, incluyendo cómo crear procedimientos Sub y Function, cómo declarar y pasar argumentos, y cómo utilizar valores de retorno y argumentos opcionales. Además, explica cómo los procedimientos permiten la reutilización de código.
El documento describe las características básicas del lenguaje de programación Pascal, incluyendo la estructura de un programa Pascal, palabras reservadas, tipos de datos, funciones para entrada y salida de datos, operadores aritméticos, y sentencias de control condicionales.
Este documento describe conceptos fundamentales de programación como algoritmos, pseudocódigo, diagramas de flujo, conversiones binarias, el lenguaje Pascal y sus componentes como constantes, variables, tipos de datos, operadores aritméticos y funciones predefinidas. Explica que un algoritmo es un conjunto de instrucciones bien definidas para realizar una tarea, y que pseudocódigo y diagramas de flujo son formas de representar algoritmos de manera gráfica o con un lenguaje similar a uno de programación.
El objetivo principal del análisis semántico es computar información adicional necesaria para el procesamiento de un lenguaje una vez obtenida la estructura sintáctica de un programa. Algunas especificaciones formales de la semántica incluyen revelar ambigüedades, servir de base para la implementación, verificar propiedades y estandarizar lenguajes de manera no ambigua.
El documento presenta una lista de editores de código, describiendo brevemente cada uno en términos de sus características, funciones y plataformas compatibles. Los editores incluyen Sublime Text, Atom, TextMate, PSPad, gEdit, Adobe Brackets, Light Table, VIM, Notepad++, Eclipse, NetBeans, IntelliJ IDEA, Visual Studio Express, Komodo Edit, jEdit, Aptana Studio, FlashDevelop, Geany y Notepad2.
Este documento presenta los elementos básicos del lenguaje de programación C++. Explica conceptos como identificadores, constantes, variables, tipos de datos, operadores, expresiones y estructuras básicas de un programa en C++. El objetivo es que los estudiantes aprendan a implementar instrucciones básicas en C++ utilizando estos elementos fundamentales.
Este documento describe el uso de funciones en el lenguaje de programación C. Explica que una función es un bloque de código que realiza una tarea específica y puede devolver un valor. Detalla la sintaxis básica de las funciones en C, incluidos los tipos de datos, parámetros y sentencia return. Además, explica conceptos como variables locales y globales, y proporciona ejemplos de funciones definidas por el usuario para ilustrar su uso.
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación Vladimir Pomares
El documento habla sobre los principios básicos de la programación y los lenguajes de programación. Define algoritmo, características de un algoritmo y partes de un algoritmo. Explica que los lenguajes de programación permiten convertir algoritmos en instrucciones entendibles para la máquina. Clasifica los lenguajes de programación y describe ejemplos de lenguajes de cada generación.
Este documento describe el uso del generador Lex para crear analizadores léxicos. Lex permite especificar patrones utilizando expresiones regulares y generar un reconocedor de tokens que divide la entrada en cadenas que coinciden con los patrones. También se puede asociar código de usuario a cada patrón para procesar los tokens. Lex se usa comúnmente junto con Yacc para proporcionar tokens al analizador sintáctico generado por Yacc.
Este documento introduce el lenguaje de programación funcional Haskell. Explica cómo instalar Haskell, los tipos de datos predefinidos como Bool, Int, Char, Float y Double, y funciones como length, mod y div. También cubre operadores de igualdad y orden como >, <, == y /=.
El documento describe el objetivo y funciones del analizador semántico de un compilador. También discute diferentes puntos de vista para describir formalmente la semántica de los lenguajes de programación, como la semántica operacional, denotacional y axiomática. Finalmente, explica cómo el análisis semántico se conecta con otras fases del compilador y qué compruebas realiza, como la declaración de identificadores, comprobaciones de tipo y unicidad.
El documento describe el proceso de compilación de un programa en C++. Incluye las etapas de escribir el código fuente, compilarlo para generar código objeto, enlazarlo con bibliotecas para crear un ejecutable, y ejecutar el programa. También explica conceptos como operadores aritméticos, de asignación, relacionales y lógicos, y funciones matemáticas predefinidas.
Este documento proporciona una introducción al proceso de compilación. Explica que un compilador traduce un programa escrito en un lenguaje fuente a otro equivalente en un lenguaje objeto. Describe las fases principales de un compilador, incluido el análisis léxico, sintáctico y semántico, y la generación de código. También cubre herramientas para construir compiladores y diferentes clasificaciones de compiladores.
El documento resume los conceptos fundamentales de la programación estructurada. Explica que la programación estructurada se basa en técnicas como el diseño descendiente, las estructuras de datos, las estructuras de control y la programación modular. Luego describe las tres estructuras de control básicas: secuencial, selectiva y repetitiva. Finalmente, incluye ejemplos de código que ilustran el uso de estas estructuras de control.
Este documento proporciona una introducción a los conceptos básicos de la programación modular en Pascal, incluyendo procedimientos, funciones, parámetros, alcance de variables, recursividad y tipos de procedimientos. Explica las diferencias entre procedimientos y funciones, y cómo se declaran, definen y llaman. También cubre conceptos como parámetros por valor y por referencia, ámbitos global y local, y estructura básica de procedimientos y funciones. Finalmente, propone ejercicios de programación relacionados con estos temas.
Este documento trata sobre funciones en C. Explica que las funciones permiten dividir un programa en segmentos más pequeños que realizan tareas específicas. Describe la estructura general de una función en C, incluyendo el tipo de retorno, nombre, lista de parámetros, cuerpo y sentencia return. También discute cómo declarar y definir funciones, y cómo pasar y devolver valores a través de funciones.
Este documento presenta información sobre funciones en C. Explica que las funciones permiten dividir un programa en segmentos que realizan tareas específicas. Detalla la estructura general de una función en C, incluyendo el tipo de retorno, nombre, lista de parámetros, cuerpo y sentencia return. Además, provee un ejemplo de código que incluye dos funciones, main y una función creada por el usuario para calcular un precio.
Este documento presenta la primera práctica de autómatas finitos deterministas (AFD). Se pide diseñar e implementar métodos para simular el funcionamiento de un AFD en Java. Esto incluye: 1) Implementar métodos de validación para AFDs que acepten cadenas de caracteres y secuencias de tokens. 2) Probar los métodos implementados usando un AFD de ejemplo. 3) Simular un juego modelado por un AFD.
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016Eudris Cabrera
Expresiones Lambdas y la API Stream son una combinación muy poderosa que requiere un cambio de paradigma de la forma en la que hemos escrito código Java hasta el momento. En esta charla vamos a mostrar a los interesados las bondades de utilizar expresiones Lambdas en combinación con la API Stream, haciendo énfasis en situaciones que se presentan en proyectos reales.
Yacc es un programa que genera analizadores sintácticos para lenguajes de programación. Permite definir la gramática de un lenguaje a través de reglas y genera código en C para el analizador sintáctico. Yacc se usa comúnmente junto con Lex para generar el analizador léxico. Define tokens, reglas gramaticales y rutinas de C para procesar el input según la gramática especificada.
La oración de Juan Pablo II expresa su dolor y sufrimiento físico y emocional, y pide a Dios que le ayude a comprender los sufrimientos de Jesús y unir sus propios dolores a los de Él para redimir a los demás. También pide por aquellos que sufren como él y por los pobres, abandonados y solitarios, y que Dios transforme sus dolencias para purificarlo y acercarlo más a Dios.
"El final del discurso es este, ama a Dios y obedece sus estatutos porque este es el todo del hombre", A traves de las lecciones hemos podido aprender, a convivir y a reconciliarnos con nuestro Dios, y que asi sea con nuestros hermanos en la fe de todo el mundo. Bendiciones
Encuentra más formas de hacer negocio / José Ignacio Porroche (Net2U)ServiDocu
Presentación realizada por José Ignacio Porroche en Zaragoza el día 11 de junio de 2009, dentro de las Jornadas “Ponte las Pilas: Incremento de competitividad a través de las TIC” organizadas por la Comisión TIC CREA / CEPYME ARAGÓN. En su presentación José Ignacio Porroche abordó como se pueden ampliar las posibilidades de hacer negocio utilizando las TIC.
Este documento describe conceptos fundamentales de programación como algoritmos, pseudocódigo, diagramas de flujo, conversiones binarias, el lenguaje Pascal y sus componentes como constantes, variables, tipos de datos, operadores aritméticos y funciones predefinidas. Explica que un algoritmo es un conjunto de instrucciones bien definidas para realizar una tarea, y que pseudocódigo y diagramas de flujo son formas de representar algoritmos de manera gráfica o con un lenguaje similar a uno de programación.
El objetivo principal del análisis semántico es computar información adicional necesaria para el procesamiento de un lenguaje una vez obtenida la estructura sintáctica de un programa. Algunas especificaciones formales de la semántica incluyen revelar ambigüedades, servir de base para la implementación, verificar propiedades y estandarizar lenguajes de manera no ambigua.
El documento presenta una lista de editores de código, describiendo brevemente cada uno en términos de sus características, funciones y plataformas compatibles. Los editores incluyen Sublime Text, Atom, TextMate, PSPad, gEdit, Adobe Brackets, Light Table, VIM, Notepad++, Eclipse, NetBeans, IntelliJ IDEA, Visual Studio Express, Komodo Edit, jEdit, Aptana Studio, FlashDevelop, Geany y Notepad2.
Este documento presenta los elementos básicos del lenguaje de programación C++. Explica conceptos como identificadores, constantes, variables, tipos de datos, operadores, expresiones y estructuras básicas de un programa en C++. El objetivo es que los estudiantes aprendan a implementar instrucciones básicas en C++ utilizando estos elementos fundamentales.
Este documento describe el uso de funciones en el lenguaje de programación C. Explica que una función es un bloque de código que realiza una tarea específica y puede devolver un valor. Detalla la sintaxis básica de las funciones en C, incluidos los tipos de datos, parámetros y sentencia return. Además, explica conceptos como variables locales y globales, y proporciona ejemplos de funciones definidas por el usuario para ilustrar su uso.
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación Vladimir Pomares
El documento habla sobre los principios básicos de la programación y los lenguajes de programación. Define algoritmo, características de un algoritmo y partes de un algoritmo. Explica que los lenguajes de programación permiten convertir algoritmos en instrucciones entendibles para la máquina. Clasifica los lenguajes de programación y describe ejemplos de lenguajes de cada generación.
Este documento describe el uso del generador Lex para crear analizadores léxicos. Lex permite especificar patrones utilizando expresiones regulares y generar un reconocedor de tokens que divide la entrada en cadenas que coinciden con los patrones. También se puede asociar código de usuario a cada patrón para procesar los tokens. Lex se usa comúnmente junto con Yacc para proporcionar tokens al analizador sintáctico generado por Yacc.
Este documento introduce el lenguaje de programación funcional Haskell. Explica cómo instalar Haskell, los tipos de datos predefinidos como Bool, Int, Char, Float y Double, y funciones como length, mod y div. También cubre operadores de igualdad y orden como >, <, == y /=.
El documento describe el objetivo y funciones del analizador semántico de un compilador. También discute diferentes puntos de vista para describir formalmente la semántica de los lenguajes de programación, como la semántica operacional, denotacional y axiomática. Finalmente, explica cómo el análisis semántico se conecta con otras fases del compilador y qué compruebas realiza, como la declaración de identificadores, comprobaciones de tipo y unicidad.
El documento describe el proceso de compilación de un programa en C++. Incluye las etapas de escribir el código fuente, compilarlo para generar código objeto, enlazarlo con bibliotecas para crear un ejecutable, y ejecutar el programa. También explica conceptos como operadores aritméticos, de asignación, relacionales y lógicos, y funciones matemáticas predefinidas.
Este documento proporciona una introducción al proceso de compilación. Explica que un compilador traduce un programa escrito en un lenguaje fuente a otro equivalente en un lenguaje objeto. Describe las fases principales de un compilador, incluido el análisis léxico, sintáctico y semántico, y la generación de código. También cubre herramientas para construir compiladores y diferentes clasificaciones de compiladores.
El documento resume los conceptos fundamentales de la programación estructurada. Explica que la programación estructurada se basa en técnicas como el diseño descendiente, las estructuras de datos, las estructuras de control y la programación modular. Luego describe las tres estructuras de control básicas: secuencial, selectiva y repetitiva. Finalmente, incluye ejemplos de código que ilustran el uso de estas estructuras de control.
Este documento proporciona una introducción a los conceptos básicos de la programación modular en Pascal, incluyendo procedimientos, funciones, parámetros, alcance de variables, recursividad y tipos de procedimientos. Explica las diferencias entre procedimientos y funciones, y cómo se declaran, definen y llaman. También cubre conceptos como parámetros por valor y por referencia, ámbitos global y local, y estructura básica de procedimientos y funciones. Finalmente, propone ejercicios de programación relacionados con estos temas.
Este documento trata sobre funciones en C. Explica que las funciones permiten dividir un programa en segmentos más pequeños que realizan tareas específicas. Describe la estructura general de una función en C, incluyendo el tipo de retorno, nombre, lista de parámetros, cuerpo y sentencia return. También discute cómo declarar y definir funciones, y cómo pasar y devolver valores a través de funciones.
Este documento presenta información sobre funciones en C. Explica que las funciones permiten dividir un programa en segmentos que realizan tareas específicas. Detalla la estructura general de una función en C, incluyendo el tipo de retorno, nombre, lista de parámetros, cuerpo y sentencia return. Además, provee un ejemplo de código que incluye dos funciones, main y una función creada por el usuario para calcular un precio.
Este documento presenta la primera práctica de autómatas finitos deterministas (AFD). Se pide diseñar e implementar métodos para simular el funcionamiento de un AFD en Java. Esto incluye: 1) Implementar métodos de validación para AFDs que acepten cadenas de caracteres y secuencias de tokens. 2) Probar los métodos implementados usando un AFD de ejemplo. 3) Simular un juego modelado por un AFD.
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016Eudris Cabrera
Expresiones Lambdas y la API Stream son una combinación muy poderosa que requiere un cambio de paradigma de la forma en la que hemos escrito código Java hasta el momento. En esta charla vamos a mostrar a los interesados las bondades de utilizar expresiones Lambdas en combinación con la API Stream, haciendo énfasis en situaciones que se presentan en proyectos reales.
Yacc es un programa que genera analizadores sintácticos para lenguajes de programación. Permite definir la gramática de un lenguaje a través de reglas y genera código en C para el analizador sintáctico. Yacc se usa comúnmente junto con Lex para generar el analizador léxico. Define tokens, reglas gramaticales y rutinas de C para procesar el input según la gramática especificada.
La oración de Juan Pablo II expresa su dolor y sufrimiento físico y emocional, y pide a Dios que le ayude a comprender los sufrimientos de Jesús y unir sus propios dolores a los de Él para redimir a los demás. También pide por aquellos que sufren como él y por los pobres, abandonados y solitarios, y que Dios transforme sus dolencias para purificarlo y acercarlo más a Dios.
"El final del discurso es este, ama a Dios y obedece sus estatutos porque este es el todo del hombre", A traves de las lecciones hemos podido aprender, a convivir y a reconciliarnos con nuestro Dios, y que asi sea con nuestros hermanos en la fe de todo el mundo. Bendiciones
Encuentra más formas de hacer negocio / José Ignacio Porroche (Net2U)ServiDocu
Presentación realizada por José Ignacio Porroche en Zaragoza el día 11 de junio de 2009, dentro de las Jornadas “Ponte las Pilas: Incremento de competitividad a través de las TIC” organizadas por la Comisión TIC CREA / CEPYME ARAGÓN. En su presentación José Ignacio Porroche abordó como se pueden ampliar las posibilidades de hacer negocio utilizando las TIC.
El documento describe Open Data y Open Government. Explica que Open Data busca que ciertos datos estén disponibles mundialmente sin restricciones. Open Government busca colaboración, participación y transparencia entre el gobierno y los ciudadanos. Presenta varios casos de implementaciones de Open Data y Open Government en España, México, Estados Unidos y Colombia.
Este documento presenta un proyecto para la ejecución de la estrategia de formación y acceso para la apropiación pedagógica de las TIC en sedes educativas beneficiadas por Computadores para Educar en la Región 8 de Antioquia y Chocó para los años 2012 a 2014. El proyecto detalla el objeto, alcance, cronograma, presupuesto, equipo de trabajo, riesgos y estrategia de formación de docentes.
Este documento ofrece consejos sobre la publicación de documentos en la web. Explica que antes de publicar es importante analizar qué información se publicará, cómo y dónde. Luego describe los pasos típicos para publicar documentos en servicios en línea, como crear una cuenta, cargar documentos y establecer parámetros de acceso. También proporciona consejos como usar un formato de texto homogéneo y crear contenido corto y sencillo.
Este documento contiene notas de prensa de varios periódicos y revistas que cubren el asesinato de José Domingo Colombo ocurrido el 5 de octubre de 1973. Los artículos detallan el crimen, las palabras del director de uno de los periódicos, y el seguimiento de la investigación policial durante los meses posteriores.
Un wiki es una página web cuyas páginas pueden ser editadas por múltiples lectores a través de un navegador web, permitiéndoles crear, modificar o eliminar texto compartido. Se puede crear un wiki de forma gratuita en sitios como pbwiki.com, wetpaint.com o wikispaces.com. Las páginas wiki normalmente incluyen un enlace "editar" para modificar el contenido fácilmente y guardar los cambios.
El documento presenta una serie de imágenes de lugares alrededor del mundo, incluyendo vistas de Groenlandia, Mauritania, Finlandia, Isla de Pascua en Chile, la Antártida, Alemania, Italia, Australia, Córcega, Rusia, Líbano, Nigeria, Botsuana, Argentina, Ecuador, Suecia, Francia, Honduras, Yemen, Lituania, Tailandia, Marruecos, Brasil, Canadá, Grecia, Irlanda, India, Egipto, Malasia, Argelia y España.
El documento presenta dos fotografías de paisajes europeos: el castillo de Trakaï en el lago Galve de Lituania y un molino en medio de campos en los Países Bajos.
La Princesa triste se aburría en su cuento hasta que un Pirata salido de una novela apareció y se enamoraron a pesar de las protestas de los otros personajes que decían que las princesas y los piratas no se enamoran. El Pirata y la Princesa decidieron irse juntos sin importarles las opiniones de los demás, navegando para encontrar la felicidad.
El documento proporciona información sobre dos bandas de rock: The Kooks y Coldplay. Resume los orígenes, miembros, discografía y éxito comercial de The Kooks. Luego detalla la historia de Coldplay desde su formación hasta sus primeros cinco álbumes de estudio, incluidos detalles sobre su formación, canciones populares y giras.
Actividad 4 investigación de posicionamientoKar Klom
Este documento presenta los resultados de una investigación de posicionamiento de cuatro universidades: EBC, UVM, ITAM y Anahuac. Se analizaron variables como colegiaturas, experiencia, imagen, planes de estudio, propuestas innovadoras y variedad de carreras. Los principales hallazgos son que EBC tiene una buena posición en experiencia e imagen, mientras que sus áreas de oportunidad son los planes de estudio y variedad de carreras. ITAM y Anahuac son fuertes en planes de estudio e innovación. UVM es accesible pero dé
El Rey Anatol era feo y ninguna princesa quería casarse con él. El sabio le dio varios consejos como usar guantes y una galera para ocultar su apariencia, pero ninguno funcionó. Luego intentó hipnotizar a una princesa pero no pudo contar hasta 20. Finalmente, el sabio encontró un anillo mágico que hacía que quien lo usara se viera hermoso. Cuando el Rey se puso el anillo, una princesa llamada Melinda aceptó casarse con él.
El documento describe conceptos de gramática y sintaxis en lenguajes de programación. Explica que una gramática es un conjunto de reglas que describen las secuencias de símbolos de un lenguaje. Presenta ejemplos del comando if en UNIX y su sintaxis. Define sintaxis como las reglas formales que determinan si un código es bien formado en un lenguaje. Muestra ejemplos de sintaxis en C e incluye un ejemplo de hola mundo en pseudocódigo.
Festival Cartagena Documento CompilatorioGermán De
La plataforma del cine y medios audiovisuales en Venezuela está integrada por varias entidades que trabajan de forma coordinada para fomentar la industria cinematográfica nacional. Estas entidades incluyen el Centro Nacional del Disco, la Distribuidora Nacional de Cine Amazonia Films, la Fundación Villa del Cine, la Fundación Cinemateca Nacional y el Centro Nacional Autónomo de Cinematografía. La plataforma busca desarrollar políticas cohesionadas, promover la producción y distribución de películas, y preservar el
Este documento resume la crisis entre el gobierno argentino y el sector agropecuario por el decreto 125 que aumentó las retenciones a la soja. Detalla las fortalezas de la cadena de soja en Argentina y cómo el decreto generó una fuerte reacción del sector. También analiza los impactos económicos del paro agropecuario y posibles consecuencias políticas de la crisis.
El resumen propone automatizar el sistema de control de facturas de la empresa Publiweb mediante una página web. El sistema permitirá a los administradores registrar facturas de servicios y gastos, calcular impuestos, ver clientes contratados y recibir alertas sobre vencimientos. Los clientes podrán solicitar paquetes publicitarios básicos, comerciales o empresariales y recibir cotizaciones con costos e impuestos. Se utilizarán herramientas como laptops, Notepad, Dreamweaver, Xampp y USB para desarrollar
Susana F I N Q U E L I E V I C H, Guadalajara, C I U D A D R E DSusana Finquelievich
El documento resume diferentes perspectivas sobre las ciudades digitales. Se describe una ciudad digital como un entorno virtual e interconectado que reemplaza la forma urbana tradicional. También se la define como una ciudad física con acceso a computadoras e Internet para todos sus habitantes. Finalmente, se plantea que una ciudad digital es un espacio inteligente que integra información urbana y crea espacios públicos virtuales para sus habitantes.
El documento contiene varios avisos y letreros de un bar público, incluyendo que el bar está cerrado actualmente, que no se deben tirar colillas al suelo, y que se conduzca con precaución dado que no hay hospital en la localidad. También incluye letreros sobre no admitir perros en parques ni áreas de juego, seguir flechas para indicaciones claras, y que las máquinas no tienen cerebro para usar el propio. Finalmente presenta nuevos inodoros públicos transparentes instalados en Suiza que dan la sensación de estar al aire
Este documento resume las nuevas características de Java 8, incluyendo interfaces funcionales, expresiones lambda, el Stream API y el nuevo motor de JavaScript Nashorn. Las interfaces funcionales permiten implementar métodos de una sola línea, mientras que las expresiones lambda proporcionan una forma más concisa de escribir código anónimo. El Stream API facilita el procesamiento de datos de forma declarativa mediante cadenas de operaciones, y Nashorn permite ejecutar código JavaScript directamente en la JVM.
Java 8 introducción a expresiones lambdas y api streamEudris Cabrera
Este documento presenta una introducción a las expresiones lambda y el API Stream en Java 8. Incluye una breve reseña sobre Java, explicaciones sobre expresiones lambda, interfaces funcionales y métodos de referencia. También cubre conceptos del API Stream como operaciones intermedias y terminales, y provee ejemplos de cómo usar streams para filtrar, mapear y coleccionar datos de manera funcional. El documento concluye con consejos prácticos sobre el uso de streams e ideas para depurar código que los utilice.
El documento presenta una introducción a la programación funcional con Java SE. Explica conceptos como funciones puras, funciones de orden superior, funciones lambda, y operadores funcionales como Function, Predicate, Consumer y Supplier. También cubre temas como Optional, Streams, composición de funciones y operaciones intermedias y finales en Streams. El objetivo es proveer una guía básica sobre los principales conceptos y herramientas de programación funcional en Java.
Java8 : Más allá de las Expresiones LambdasEudris Cabrera
Este documento presenta una introducción a las expresiones lambda y conceptos básicos de programación funcional en Java 8. La agenda incluye una breve reseña sobre Java, Java 8, expresiones lambda, conceptos básicos de programación funcional, procesamiento de datos con streams y el nuevo API de fechas. El orador es Eudris Cabrera, ingeniero telemático y desarrollador de software.
El documento habla sobre los principios básicos de la programación y los lenguajes de programación. Define algoritmo, características de un algoritmo y partes de un algoritmo. Explica que los lenguajes de programación permiten convertir algoritmos en instrucciones entendibles para la máquina. Clasifica los lenguajes de programación y describe ejemplos de lenguajes de cada generación.
1) El documento presenta conceptos básicos de algoritmia y programación estructurada como pseudocódigo, elementos de un programa, identificadores, constantes, variables, expresiones, entrada y salida de información.
2) Se explican conceptos como instrucciones de lectura y escritura, asignación de variables, expresiones aritméticas y lógicas.
3) Se incluyen ejemplos de algoritmos sencillos y ejercicios para practicar los conceptos.
En la constante búsqueda de lograr hacer código mas compacto, que nos permitan acortar los tiempos de desarrollo, es que Java ha desarrollado la programación funcional.
Te recomiendo que visites:
http://gcoronelc.blogspot.pe/
http://gcoronelc.blogspot.pe/2016/10/eureka-cs-oracle-jdbc.html
Este documento proporciona una introducción a C++, cubriendo temas como tipos de datos fundamentales, funciones, la palabra reservada void, el uso de null, principios básicos de programación como la función main, variables, jerarquía de operaciones, funciones miembro, plantillas, clases abstractas, espacios de nombres, herencia y sobrecarga de operadores.
Este documento trata sobre los elementos básicos del lenguaje de programación C#. Explica las clases, objetos, tipos de datos, interfaces, estructuras, propiedades, eventos y otros conceptos fundamentales del lenguaje. También describe las herramientas disponibles para desarrollar en C#, como el compilador C# y el entorno de desarrollo Visual Studio.
El documento introduce el lenguaje de programación Visual Basic. Explica que Visual Basic es un lenguaje visual para crear interfaces gráficas de usuario y es adecuado para principiantes. Describe conceptos básicos como objetos, eventos, formularios y controles en Visual Basic.
El documento explica las interfaces en Java. Define las interfaces como contratos que estandarizan la forma en que las clases interactúan entre sí, aunque no estén relacionadas por herencia. Detalla que las interfaces sólo pueden contener métodos abstractos y constantes, y que al implementar una interfaz, una clase se compromete a implementar todos sus métodos. Explica algunos usos comunes de las interfaces como Comparable y Serializable.
Este documento proporciona una introducción básica al lenguaje de programación Java, incluyendo conceptos como comentarios, identificadores, palabras clave, literales, operadores, tipos de datos primitivos, clases, objetos, variables, métodos, control de flujo, paquetes, entrada/salida, compilación y ejecución de programas, arrays, cadenas de texto y gestión de ficheros. Explica los elementos fundamentales de Java necesarios para comenzar a programar en este lenguaje.
Este documento proporciona una introducción al lenguaje de programación Java. Explica conceptos básicos como comentarios, identificadores, palabras clave, literales y operadores. También describe tipos de datos primitivos, clases, variables miembro, métodos, estructuras de control de flujo, paquetes, importaciones, entrada/salida estándar, compilación y ejecución. Además, cubre temas como arrays, cadenas de texto, vectores dinámicos y gestión de archivos.
Este documento proporciona una introducción a los conceptos básicos del lenguaje de programación Java, incluyendo comentarios, identificadores, palabras clave, literales, operadores, separadores, tipos de datos primitivos, objetos, clases, variables, métodos, estructuras de control de flujo, paquetes, entrada y salida estándar, compilación y ejecución, arrays y la clase String.
Este documento presenta una introducción al lenguaje de programación Java. Explica conceptos básicos como variables, tipos de datos, operadores, estructuras de control de flujo y repetición. También describe la API básica de Java incluyendo métodos de la clase Math y presenta ejercicios para practicar los conceptos aprendidos.
Este documento presenta una lista de editores de código y entornos de desarrollo integrados. Describe brevemente las características, funciones y plataformas compatibles de editores como Sublime Text, Atom, TextMate, PSPad, gEdit, Adobe Brackets, Light Table, VIM, Notepad++, Eclipse, NetBeans, IntelliJ IDEA, Visual Studio Express, Komodo Edit, jEdit, Aptana Studio, FlashDevelop, Geany y Notepad2. También incluye ejemplos de trabajo con identificadores, palabras reservadas y tipos
El documento explica cómo dividir un programa grande en métodos más pequeños y manejables. Un método se define indicando su tipo de valor de retorno, nombre, lista de parámetros y bloque de código. Los métodos permiten evitar la repetición de código y estructurar un programa de manera modular. Se provee un ejemplo de clase con diferentes métodos que ilustra conceptos como invocación de métodos, paso de parámetros, variables locales y retorno de valores.
Similar a Lambdas y API Stream #PerúJUG #Java20 (20)
3. Expresiones Lambda
Funciones como valores/parámetros
<<interface>>
ApplePredicate
+test(Apple):boolean
AppleGreenColorPredicate AppleRedColorPredicate
AppleHeavyWeightPredicateAppleRedAndHeavyPredicate
+test(Apple):boolean +test(Apple):boolean
+test(Apple):boolean +test(Apple):boolean
Apple
+getWeight():double
+getColor():String
4. Expresiones Lambda
Funciones como valores/parámetros
public class AppleHeavyWeightPredicate implements ApplePredicate{
public boolean test(Apple apple){
return apple.getWeight() > 150;
}
}
public class AppleGreenColorPredicate implements ApplePredicate{
public boolean test(Apple apple){
return "green".equals(apple.getColor());
}
}
...
Código tomado del libro Java 8 in Action
5. Expresiones Lambda
Funciones como valores/parámetros
…
public static List<Apple> filterApples(List<Apple> inventory, ApplePredicate p){
List<Apple> result = new ArrayList<>();
for(Apple apple: inventory){
if(p.test(apple)){
result.add(apple);
}
}
return result;
}
...
Código tomado del libro Java 8 in Action
Nuestro predicado encapsula
la condición
6. Expresiones Lambda
Funciones como valores/parámetros
…
List<Apple> inventory = ...
//Separar manzanas por color
List<Apple> greenApples = filterApples(inventory, new
AppleGreenColorPredicate());
//Separar manzanas por peso
List<Apple> heavyApples = filterApples(inventory, new
AppleHeavyWeightPredicate());
...
Código tomado del libro Java 8 in Action
public boolean test(Apple apple){
return apple.getWeight() > 150;
}
Necesitaríamos muchas clases...
7. Expresiones Lambda
Funciones como valores/parámetros
…
List<Apple> inventory = ...
List<Apple> redApples = filterApples(inventory, new ApplePredicate() {
public boolean test(Apple apple){
return "red".equals(apple.getColor());
}
});
List<Apple> greenApples = filterApples(inventory,
new ApplePredicate() {
public boolean test(Apple apple){
return "green".equals(apple.getColor());
}
});
...
Código tomado del libro Java 8 in Action
Enredado, repetido...
8. Expresiones Lambda
Funciones como valores/parámetros
...
List<Apple> inventory = …
List<Apple> redApples = filterApples(inventory,
(Apple a) -> "red".equals(a.getColor());
List<Apple> greenApples = filterApples(inventory,
(Apple a) -> "green".equals(a.getColor()));
...
Código tomado del libro Java 8 in Action
Parametrización de comportamiento
9. Expresiones Lambda
Definición
Métodos anónimos, es decir, métodos sin nombre o clase.
Paquete java.util.function
Permite escribir código más claro que usar clases anónimas.
(parámetros) -> {cuerpo expresión lambda}
Operador
lambda
10. Expresiones Lambda
Definición
Ejemplos de expresiones lambda:
(int a, int b) -> a + b
a -> a + 1
(int a, int b) -> { System.out.println(a + b); return a + b; }
• El cuerpo puede lanzar excepciones
• Una sola línea no requiere llaves ni la sentencia return
• Varias líneas requieren separador punto y coma (;)
• Un solo parámetro no requiere paréntesis
• Ningún parámetro requiere paréntesis vacíos
Parámetros Cuerpo
Operador
lambda
11. Expresiones Lambda
Definiciones – Interfaces Recargadas - Métodos por Defecto
Definidos e implementados en la Interface.
Implementación por defecto se usa solo
cuando la clase implementadora no provee
su propia implementación
Para quien invoca, es un método más de la
Interface.
Especial cuidado cuando se implementen
Interfaces con métodos por defecto
iguales…
public interface MorningInterface {
default void saludo(){
System.out.println("Buenos días");
}
}
public interface AfternoonInterface {
default void saludo(){
System.out.println("Buenas tardes");
}
}
Interface List<T> {
…
default void sort(Comparator<? super T> cmp)
{
Collections.sort(this, cmp);
}
…
}
12. Expresiones Lambda
Definiciones – Interfaces Recargadas - Métodos por Defecto
En caso de conflictos, este es el orden en el que se selecciona el método por defecto:
1. Implementaciones en clases concretas
2. Implementaciones en subinterfaces
3. Explícitamente seleccionando el método usando: X.super.m(...)
Donde X es la interface y m es el método deseado
También debemos notar que, a partir de Java 8, además de métodos por defecto, las interfaces
también pueden proveer implementación de métodos estáticos.
13. Expresiones Lambda
Definiciones – Interfaces Recargadas - Métodos por Defecto
public class MultipleInheritance implements MorningInterface
{
public static void main(String... args) {
MultipleInheritance m = new MultipleInheritance();
m.saludo(); //Buenos días
}
}
14. Expresiones Lambda
Definiciones – Interfaces Recargadas - Métodos por Defecto
public class MultipleInheritance implements MorningInterface, AfternoonInterface
{
public static void main(String... args) {
MultipleInheritance m = new MultipleInheritance();
m.saludo(); //Saludo desde clase implementadora
m.saludoMañanero(); //Buenos días
m.saludoTarde(); //Buenas tardes
}
@Override
public void saludo() { System.out.println("Saludo desde clase implementadora"); }
public void saludoMañanero() { MorningInterface.super.saludo(); }
public void saludoTarde() { AfternoonInterface.super.saludo(); }
}
En este caso es obligatorio implementar el
método
En este caso es obligatorio implementar el
método
15. Expresiones Lambda
Definiciones – Interfaces Funcionales
SAM: Single Abstract Method.
Interface Funcional: Interface con
un solo método abstracto (SAM) y
diferente a los métodos de Object
(toString, equals…).
@FunctionalInterface
Indica al compilador que debe
verificar si se trata de una interfase
funcional.
@FunctionalInterface
public interface InterfaceEjemplo{
/** Imprime algo*/
void imprimir();
/** Método de Object, no cuenta contra SAM*/
boolean equals(Object obj);
}
//Ejemplo de Interfases funcionales que ya conocemos:
Interface Runnable { void run(); }
Interface Comparator<T> {
boolean compare(T x, T y);
}
Interface ActionListener { void actionPerformed(…); }
16. Expresiones Lambda
Definiciones – Interface Funcional – 4 Grandes Grupos
@FunctionalInterface
public interface Supplier<T> {
T get();
//Otros métodos...
}
@FunctionalInterface
public interface Function<T, R> {
R apply(T);
//Otros métodos...
}
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
//Otros métodos...
}
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
//Otros métodos...
}
Uso: Mapear de un valor a otro
Uso: Creación de objetosUso: Validación de criterios
Uso: Consumir métodos del parámetro.
Tiene efectos secundarios
17. Expresiones Lambda
Definiciones – Inferencia de tipos
//Comparator usando clases anónimas...
Comparator<String> c = new Comparator<String>() {
public int compare(String x, String y) {
return x.length() - y.length();
}
};
//Comparator usando Lambdas...
Comparator<String> c = (x, y) -> x.length() - y.length();
Contexto de asignaciónContexto de asignación
18. Expresiones Lambda
Definiciones – Inferencia de tipos
//Comparator usando clases anónimas...
Comparator<String> c = new Comparator<String>() {
public int compare(String x, String y) {
return x.length() - y.length();
}
};
//Comparator usando Lambdas...
Comparator<String> c = (x, y) -> x.length() - y.length();
Contexto de asignaciónContexto de asignación
19. Expresiones Lambda
Definiciones – Inferencia de tipos - Casos especiales
//Misma expresión lambda, diferentes interfaces funcionales
Callable<Integer> c = () -> 42;
PrivilegedAction<Integer> p = () -> 42;
//void-compatibility rule
List<String> list = ...
Predicate<String> p = s -> list.add(s);
Consumer<String> c = s -> list.add(s);
Aunque el método abstracto de Consumer
retorna void, no hay error de compilación
20. Expresiones Lambda
Definiciones – Alcance
Efectivamente Constante: Variable o
parámetro que solo es asignado una vez.
this hace referencia a la instancia de la clase
sobre la cual se ha escrito la expresión
Lambda.
void expire(File root, long before) {
...
root.listFiles(File p -> p.lastModified() <= before);
...
//Esto causaría error de compilación
before = 10000;
}
class SessionManager {
long before = ...;
void expire(File root) {
...
root.listFiles(File p -> checkExpiry(p.lastModified(),
this.before));
}
boolean checkExpiry(long time, long expiry) { ... }
}
21. Expresiones Lambda
Definiciones – Métodos de Referencia
Invocación de métodos por su nombre.
Expresiones Lambda más compactas y
fáciles de leer.
Solo para cuando la expresión lambda
tiene una sola sentencia.
Existen 4 tipos:
Métodos Estáticos
Métodos de Instancia de un objeto
Métodos de Instancia de algún tipo
Constructores
//Uso para métodos estáticos
Clase::metodoEstatico
//Uso para métodos de instancia de un objeto existente
Objeto::metodoDeInstancia
//Uso para métodos de instancia de algún tipo de objeto
Tipo::metodoDeInstancia
//Uso para constructores
Clase::new
public class Person {
String name;
LocalDate birthday;
//gets…sets…
public static int compareByAge(Person a, Person b) {
return a.birthday.compareTo(b.birthday);
}
}
22. Expresiones Lambda
Definiciones – Métodos de Referencia::Métodos Estáticos
public class Testing
{
public static void main(String… args)
{
Person[] personArray = new Person[1000];
…
//ingresar objetos tipo persona al arreglo...
…
//Ordenar el arreglo usando lambdas
Arrays.sort(personArray, (a, b) -> Person.compareByAge(a, b));
//Ordenar el arreglo usando métodos de referencia
Arrays.sort(personArray, Person::compareByAge);
}
}
23. Expresiones Lambda
Definiciones – Métodos de Referencia::Métodos de Instancia de un objeto
public class ComparisonProvider {
public int compareByName(Person a, Person b) { return a.getName().compareTo(b.getName());}
}
...
public class Testing
{
public static void main(String… args)
{
Person[] personArray = new Person[1000];
//ingresar objetos tipo persona al arreglo...
ComparisonProvider myComparisonProvider = new ComparisonProvider();
//Ordenar el arreglo usando lambdas
Arrays.sort(personArray, (a,b)->myComparisonProvider.compareByName(a, b));
//Ordenar el arreglo usando métodos de referencia
Arrays.sort(personArray, myComparisonProvider::compareByName);
}
}
24. Expresiones Lambda
Definiciones – Métodos de Referencia::Métodos de Instancia de algún Tipo
public class Testing
{
public static void main(String… args)
{
String[] stringArray = {"Zuñiga", "James", "Cuadrado", "John",
"Armero", "Murillo", "Falcao", "Martínez"};
//Ordenar el arreglo usando lambdas
Arrays.sort(stringArray, (a, b) -> a.compareToIgnoreCase(b));
//Ordenar el arreglo usando métodos de referencia
Arrays.sort(stringArray, String::compareToIgnoreCase);
}
}
25. Expresiones Lambda
Definiciones – Métodos de Referencia::Constructores
public class Testing
{
public static void main(String… args)
{
//Crear una persona usando lambdas
Supplier<Persona> s1 = () -> new Persona();
Persona p1 = s1.get();
//Crear una persona usando métodos de referencia
Supplier<Persona> s1 = Persona::new;
Persona p1 = s1.get();
}
}
26. Expresiones Lambda
Definiciones – Métodos de Referencia::Constructores
public class Manzana{
private int peso;
public Manzana(int w){ peso = w;}
}
…
//Crear una manzana usando lambdas
Function<Integer, Manzana> f1 = (w) -> new Manzana(w);
Manzana m1 = f1.apply(100);
//Crear una manzana usando métodos de referencia
Function<Integer, Manzana> f1 = Manzana::new;
Manzana m1 = f1.apply(100);
...
27. Expresiones Lambda
Definiciones – Expresiones Compuestas
Usar métodos por defecto para crear
expresiones más complejas.
Predicate<T>
Incluye métodos and, or, negate.
Function<T,R>
Incluye métodos andThen y compose.
Comparator<T>
Incluye métodos reversed, comparing,
thenComparing.
//Creación de predicados complejos
Predicate<String> p1 = s -> s.length() > 3;
Predicate<String> p2 = s -> s.charAt(0) == 'A';
Predicate<String> p3 = ...
//Precedencia de izquierda a derecha
Predicate<String> p4 = p1.or(p2).and(p3).negate();
//Composición de funciones
Function<String, Integer> f1 = String::length;
Function<Integer, Integer> f2 = i -> i * 2;
//Primero aplica f1 y al resultado aplica f2
Function<String, Integer> f3 = f1.andThen(f2);
//Composición de comparadores
Comparator<String> c1 = (a,b) -> a.length() - b.length();
Comparator<String> c2 = String::compareTo;
//Primero compare con c1 y si son iguales use c2
Comparator<String> c3 = c1.thenComparing(c2);
28. Stream API
Definiciones - Stream
Secuencia de elementos de una fuente que soporta operaciones para el
procesamiento de sus datos:
1. De forma declarativa usando expresiones lambda.
2. Es posible el encadenamiento de varias operaciones haciendo al
código fácil de leer y con un objetivo claro.
3. Operaciones se ejecutan de forma secuencial o paralela (Fork/Join)
Paquete java.util.stream
Interfase java.util.stream.Stream
Map
Reduce
Filter
29. Stream API
Definiciones - Stream
Un Stream está compuesto de tres (3) partes:
1. Una fuente de información
2. Cero o más operaciones intermedias
3. Una operación final: Produce un resultado o un efecto en los datos
List transacciones = ...
int sum = transacciones.stream().
filter(t -> t.getProveedor().getCiudad().equals(“Cali”)).
mapToInt(Transaccion::getPrecio).
sum();
Fuente
Operaciones intermedias
Operación terminal
30. Stream API
Definiciones - Stream
Propiedades de un Stream:
1. Operaciones intermedias retornan otro Stream = Encadenamiento de operaciones
2. Operaciones intermedias son encoladas hasta que una operación terminal sea invocada
3. Solo puede ser recorrido una vez (IllegalStateException)
4. Iteración interna = Iteración automática
●
Iteración secuencial o paralela transparante para el desarrollador
●
Permite definir el “Qué quiero lograr” en vez del “Cómo lo quiero lograr”
5. Versiones “primitivas” evitan el Autoboxing y Unboxing
●
DoubleStream
●
IntStream
●
LongStream
31. Stream API
Definiciones – Stream - Creación
Diferentes formas de obtener un Stream
1. Stream.of(T): Stream<T> -> Retorna un Stream ordenado y secuencial de los elementos pasados
por parámetro
2. Stream.empty():Stream -> Retorna un Stream secuencial vacío.
3. Arrays.stream(T[]):Stream<T> -> Retorna un Stream secuencial del arreglo pasado por parámetro.
Versión “primitiva” retorna: DoubleSTream, IntStream, LongStream.
4. Collection<E>.stream():Stream<E> -> Retorna un Stream secuencial de los elementos de la
colección. Versión en paralelo: Collection<E>.parallelStream():Stream<E>
5. Stream.iterate(T, UnaryOperator<T>):Stream<T> -> Retorna un Stream infinito, ordenado y
secuencial, a partir del valor inicial T y de aplicar la función UnaryOperator al valor inicial para
obtener los demás elementos. Para limitar su tamaño, se puede usar el método +limit(long):Stream
6. Stream.generate(Supplier<T>):Stream<T> -> Retorna un Stream infinito, scuencial pero no
ordenado, a partir de una expresión lambda que provee los elementos.
32. Stream API
Operaciones sobre colecciones de datos - Filter
Para filtrar los elementos de un Stream podemos usar los siguientes métodos:
+filter(Predicate<T>):Stream<T> -> Retorna un Stream que contiene solo los
elementos que cumplen con el predicado pasado por parámetro.
+distinct():Stream<T> -> Retorna un Stream sin elementos duplicados.
Depende de la implementación de +equals(Object):boolean.
+limit(long):Stream<T> -> Retorna un Stream cuyo tamaño no es mayor al
número pasado por parámetro. Los elementos son cortados hasta ese
tamaño.
+skip(long):Stream<T> -> Retorna un Stream que descarta los primeros N
elementos, donde N es el número pasado por parámetro. Si el Stream
contiene menos elementos que N, entonces retorna un Stream vacío.
Map
Reduce
Filter
33. Stream API
Operaciones sobre colecciones de datos - Map
Podemos transformar los elementos de un Stream al extraer información de
éstos. Para lograrlo podemos usar alguno de los siguientes métodos:
+map(Function<T, R>): Stream<R> -> Retorna un Stream que contiene el
resultado de aplicar la función pasada por parámetro a todos los elementos
del Stream. Transforma los elementos de T a R.
También existe en su versión “primitiva”:
+mapToDouble(ToDoubleFunction<T>): DoubleStream
+mapToInt(ToIntFunction<T>): IntStream
+mapToLong(ToLongFunction<T>): LongStream
La ventaja de usar las versiones primitivas radica en que se evita el uso de
Autoboxing y Unboxing, lo que en algunas situaciones puede ser deseado por
temas de rendimiento.
Map
Reduce
Filter
34. Stream API
Operaciones sobre colecciones de datos - Map
+flatMap(Function<T, Stream<R>):Stream<R>
Permite transformar cada elemento en un Stream y al final concatenarlos en
un solo Stream.
También existe en su versión “primitiva”:
+flatMapToDouble(Function<T, DoubleStream): DoubleStream
+flatMapToInt(Function<T, IntStream): IntStream
+flatMapToLong(Function<T, LongStream): LongStream
La ventaja de usar las versiones primitivas radica en que se evita el uso de
Autoboxing y Unboxing, lo que en algunas situaciones puede ser deseado por
temas de rendimiento.
Map
Reduce
Filter
35. Stream API
Operaciones sobre colecciones de datos - Map
Taller Lambdas y Stream APITaller
Lambdas y Stream APITallerTaller
Lambdas y Stream APITallerTaller
2
Stream<String>
map(s->s.split(“ “))
Stream<String[]>
distinct()
Stream<String[]>
count()
ERROR!
36. Stream API
Operaciones sobre colecciones de datos - Map
Taller Lambdas y Stream APITaller
Lambdas y Stream APITallerTaller
5
Stream<String>
map(s->s.split(“ “))
Stream<String[]>
distinct()
Stream<Stream<String>>
count()
flatMap(Arrays::stream)
Lambdas y Stream APITallerTaller
Lambdas y Stream APITaller
CORRECTO!
Stream<String>
37. Stream API
Operaciones sobre colecciones de datos - Reduce
Operaciones terminales provocan que todas las operaciones intermedias
sean ejecutadas.
Existen operaciones terminales que permiten obtener datos del Stream
como: conteo, mínimo, máximo, búsqueda, y en general reducir el Stream
a un valor.
Existen algunas operaciones terminales cuyo propósito es el consumo de
los elementos del Stream, por ejemplo: +foreach(Consumer<T>):void
Existen otras operaciones terminales que permiten recolectar los
elementos de un Stream en estructuras mutables.
Map
Reduce
Filter
38. Stream API
Operaciones sobre colecciones de datos – Reduce - Agregación
Entre las operaciones terminales que permiten obtener datos del Stream
tenemos:
+count():long -> Retorna la cantidad de elementos en el Stream
+max(Comparator<T>):Optional<T> -> Retorna el elemento máximo del
Stream basado en el comparador pasado por parámetro. Nótese que el
retorno es de tipo Optional.
+min(Comparator<T>):Optional<T> -> Retorna el elemento mínimo del
Stream basado en el comparador pasado por parámetro. Nótese que el
retorno es de tipo Optional.
Map
Reduce
Filter
39. Stream API
Operaciones sobre colecciones de datos – Reduce - Búsqueda
+allMatch(Predicate<T>):boolean -> Verifica si todos los elementos del
Stream satisfacen el predicado pasado por parámetro. Si alguno no lo
cumple, para la verificación y retorna falso.
+anyMatch(Predicate<T>):boolean -> Verifica si alguno de los elementos
del Stream satisface el predicado pasado por parámetro. Si alguno lo
cumple, para la verificación y retorna verdadero.
+noneMatch(Predicate<T>):boolean -> Verifica si todos los elementos del
Stream NO satisfacen el predicado pasado por parámetro. Si alguno SI lo
cumple, para la verificación y retorna false.
+findAny():Optional<T> -> Retorna algún elemento del Stream. Nótese el
retorno es de tipo Optional.
+findFirst():Optional<T>: Retorna el primer elemento del Stream. Nótese
el retorno es de tipo Optional.
Map
Reduce
Filter
40. Stream API
Operaciones sobre colecciones de datos – Reduce
+reduce(BinaryOperator<T>):Optional<T>
Realiza la reducción del Stream usando una
función asociativa.
+reduce(T, BinaryOperator<T>):T
Realiza la reducción del Stream usando un
valor inicial y una función asociativa.
List<Integer> numeros = …
//Obtiene el posible número mayor par del Stream
Optional<Integer> opt = numeros
.stream()
.filter(x -> x % 2 == 0)
.reduce(Integer::max);
//Obtiene la suma de los elementos del Stream
Integer suma = numeros
.stream()
.reduce(0, (x,y) -> x + y);
41. Stream API
Operaciones sobre colecciones de datos – Reduce - Collectors
collect es una operación terminal que permite
recolectar los elementos de un Stream.
Collectors es una clase utilitaria que provee
métodos estáticos que retornan los
recolectores más usados. Dichos recolectores
pueden ser agrupados en 3 tipos:
●
Reducción y resúmen: Reducen el Stream
y permite obtener valores agregados.
●
Agrupamiento: Agrupa elementos en un
Map usando una función de clasificación.
●
Particionamiento: Agrupamiento donde la
función de clasificación es un predicado.
Agrupa los elementos en un Map de 2
llaves: false y true
Import static java.util.stream.Collectors.*;
...
List<Integer> numeros = …
//Reducción y resúmen: Cuenta
long cuenta = numeros.stream().collect(counting());
//Reducción y resúmen: Suma
int suma = numeros
.stream()
.collect(summingInt(x -> x.intValue()));
//Reducción y resúmen: Objeto resúmen
IntSummaryStatistics res = numeros
.stream()
.collect(summarizingInt(Integer::intValue));
//Reducción y resúmen: Unión de cadenas
String csv = numeros.stream().map(Object::toString)
.collect(joining(", "));
summarizingLong
summarizingDouble
summingLong
summingDouble
42. Stream API
Operaciones sobre colecciones de datos – Reduce - Collectors
Import static java.util.stream.Collectors.*;
…
List<Empleado> empleados = …
// Agrupamiento
Map<String, List<Empleado>> porDept = empleados
.stream()
.collect(groupingBy(Empleado::getDepartmento));
Map<String, Long> deptCant = empleados
.stream()
.collect(groupingBy(Empleado::getDepartmento), counting());
Map<String, Map<String, List<Empleado>>> dptoCiu = null;
dptoCiu = empleados
.stream()
.collect(groupingBy(Empleado::getDepartamento, groupingBy(Empleado::getCiudad)));
Función de clasificación
En el Map quedan solo las llaves
que tengan valores
Segundo collector permite
agrupar n-niveles
Segundo collector permite
Contar la cantidad de elementos
43. Stream API
Operaciones sobre colecciones de datos – Reduce - Collectors
Import static java.util.stream.Collectors.*;
…
List<Estudiante> estudiantes = …
//Estudiantes separados entre los que ganaron y perdieron el curso
Map<Boolean, List<Estudiante>> valoracion = estudiantes
.stream()
.collect(partitioningBy(s -> s.getNota() >= 3.0));
//Cantidad de estudiantes separados entre los que ganaron y perdieron el curso
Map<Boolean, Long> valoracion = estudiantes
.stream()
.collect(partitioningBy(s -> s.getNota() >= 3.0, counting()));
Función de clasificación
Segundo collector permite
contar la cantidad de elementos
particionar n-niveles, etc.
44. Stream API
Debug
+peek(Consumer<T>):Stream<T>
●
Operación Intermedia
●
Cada elemento es pasado al Consumer
●
No modificar los elementos del Stream
Cuando se requiera definir breakpoints
●
Usar métodos de referencia
●
Usar peek entre operaciones intermedias
List<String> palabras = ...
List<String> unicas = palabras.stream()
.flatMap(w -> Stream.of(w.split(“ “)))
.peek(s -> s.toString())
.map(String::toLowerCase)
.peek(s -> metodoReferencia(s))
.distinct()
.collect(Collectors.toList());
45. Stream API
Streams Paralelos
Propiedades de un Stream Paralelo:
1. Usa Fork/Join internamente
2. Usar +parallel():Stream para convertir a paralelo.
3. Usar +sequential():Stream para convertir a secuencial.
4. La última llamada a +parallel():Stream o +sequential():Stream es la que se tiene en cuenta.
5. ¿Cuántos hilos en paralelo? Runtime.getRuntime.availableProcessors()
6. Propiedad: "java.util.concurrent.ForkJoinPool.common.parallelism" modifica valor por defecto
7. El uso de Streams en Paralelo requiere más trabajo, no siempre terminará más rápido que
Streams secuenciales.
46. Stream API
Streams Paralelos - ¿Cuándo usarlos?
Consideraciones a tener en cuenta si se desea usar Streams en Paralelo:
1. Medir primero
●
N = Número de items
●
Q = costo de procesar un item
●
N*Q = Costo total de las operaciones. Mientras más grande, mejor usar Streams Paralelos
2. Evitar el Autoboxing y Unboxing
3. Algunas operaciones no se comportan bien en paralelo
●
+limit(long):Stream<T>
●
+findFirst():Optional<T>
●
+sorted():Stream<T>
●
+distinct():Stream<T>
4. Usar estructuras que sean fáciles de descomponer
●
ArrayList -> Exelente
●
HashSet, TreeSet -> Bien
●
LinkedList -> Mal
47. Enlaces de interés
Java SE 8 API docs
http://download.java.net/jdk8/docs/api/
JDK 8 Download
http://www.oracle.com/technetwork/java/javase/overview/
Artículos
Lambdas y API Stream Parte 1
Lambdas y API Stream Parte 2
Taller Práctico
https://github.com/aalopez/lambdas-lab
Java 8 in Action
http://www.manning.com/urma/