SlideShare una empresa de Scribd logo
Java 1.8:Road to
Functional Language
Javier Antoniucci
Cristian Romero Matesanz (cristian.romero@adesis.com)
Presentación
▪ Cristian Romero Matesanz
▪ Ingeniero Informático Uc3m
▪ Colegiado 105 colegio Ingenieros Informáticos de Madrid
▪ Arquitecto Software Adesis Netlife
▪ 8 años de profesión
▪Especialista en Aplicaciones basadas en Java, J2ee,
Spring.
▪Pragmático/ Obsesionado con realizar software probado.
▪Apasionado por el continuo aprendizaje dentro de la
profesión (Spring Boot, Java 1.8, Spring Integration,
Jhipsters, Neo4j etc....).
▪Amante y apasionado de la música electrónica.
https://github.com/cristianprofile
Historia de Java
Concepto programación
funcional
▪ Me: "Sofia, let's put the toys away. Is there a toy on the
ground"
▪ Sofia: "Yes, the ball"
▪ Me: "Ok, put the ball in the box. Is there something else?"
▪ Sofia: "Yes, there is my doll"
▪ Me: "Ok, put the doll in the box. Is there something else?"
▪ Sofia: "Yes, there is my book"
▪ Me: "Ok, put the book in the box. Is there something
else?"
▪ Sofia: "No, nothing else"
▪ Me: "Fine, we are done"
“put inside the box all the toys that are on
the ground".
▪ Podemos procesar varios juguetes a
la vez, uno en cada mano
▪ Puede ir recogiendo los juguetes que
más le interesen por cercanía primero
Enfoque funcional
Enfoque iterativo clásico
Functional Interfaces
▪ Un único método abstracto
▪ N métodos default y estáticos
▪ Importante: pueden ser instanciadas usando lambdas (sin
necesidad de realizar un new de una clase que la
implemente).
▪ Deberían ir anotadas @FunctionalInterface (no obligatorio)
▪ Similitud con clases abstractas → diferencia las clases
abstractas pueden tener estado e incluir constructores (las
variables son final)
Functional Interfaces: Ejemplo
Lambda
▪ Se puede definir como una función anónima (Método sin
declaración).
▪ (arg1, arg2...) -> { body }
▪ (type1 arg1, type2 arg2...) -> { body }
Instanciar @functionalinterfaces
mediante lambdas (is magic :=)
▪
Instanciadas en tiempo de compilación
Funciones en java (1/2)
▪ Existe la creencia que las funciones son nuevas en la
versión java 1.8, pero en realidad todos las hemos usado
desde java 5/6/7.
Clase anónima
Funciones en java (2/2)
Lambda recordatorio
▪ Lambda is only syntactic sugar to simplify the
Function (or Whatever) interface
implementation by an anonymous class. It has
in fact absolutely nothing to do with functions.
▪ Java 8 does not know anything about functions.
Functions are ordinary object with ordinary
methods that we may call. Nothing more.
▪ Java solo dispone de funciones de uno o dos
parámetros, si quiero más parámetros entonces
necesitare la técnica de Currificar la función.
Referencias estáticas a métodos y
constructores
▪ Mecanismo que permite el acceso a métodos y constructores
de manera sencilla
▪ Sintaxis: NombreClase::nombreMetodo
▪ Ejemplo:
▪ Math::addExact;
▪ Person::new;
Referencias estáticas a métodos y
constructores
Referencia método estático
Referencia método clase con
un objeto arbitrario
Referencia método de la clase con
instancia de objeto especifica
Referencia constructor
Método Sin argumentos
Método 1 argumento
Método 1 argumento
Referencias estáticas a métodos y
constructores
Lambdas e interfaces funcional:
Cuál es su utilidad dentro de java?
▪ Los métodos permiten definir como parámetro de llamada
una interfaz funcional: parámetro lambda.(función anónima)
▪ Java 8 ha reescrito y creado nuevas clases basadas en este
potente mecanismo, de modo que podemos pasar como
parámetro una lambda.
▪ Este enfoque permite usar gran parte de los mecanismos en
los que se basa la programación funcional (no todos ya que
java no fue concebido como un lenguaje funcional)
Java Streams: bienvenido al
mundo funcional!!!!
▪ Api añadida a las colecciones para permitir manipular de
manera sencilla y funcional.
▪ Se basa en concepto de pipeline de operaciones:
▪ Operaciones intermedias: realizan una operación y devuelve un
nuevo stream
▪ Operaciones terminales: produce un resultado y cierra el stream
Java Streams: Concepto pipeline
Java Streams: concepto de
pipeline
Java Streams: resumen de
operaciones en Streams
Java Streams: resumen de
operaciones en Streams
Java Streams: Stream versus
parallel Stream!!!!
▪ Como hemos comentado una de las ventajas de la
programación funcional era la posibilidad de procesar los
elementos en paralelo
▪ Para ello java 1.8 ha introducido el concepto de
paralellstream: stream().parallel().
▪ Common fork-join thread pool problem. Bloqueos por uso
compartido de hilos. (No todo podía ser bueno :) )
▪ Posible workaround: (usamos un fork nuevo no el pool común)
!!!!! Cuidado con la creación infinita de hilos !!!!!!
Optional: Bye Bye Null Pointer!!!!
Presentación clase Optional!!!!
▪ Clase introducida en java 1.8 para permitir valores
opcionales.
Métodos mas importantes clase
Optional!!!!
Métodos más importantes clase
Optional!!!!
Métodos más importantes clase
Optional!!!
Optional: No es oro todo lo que
reluce!!!!
▪ Nuevas apis y métodos de Stream incluyen el uso de
optionals (findFirst,findAny,max,min)
▪ Las antiguas apis siguen dando la posibilidad de devolver
null.
▪ Difícil cambiar las apis por retrocompatiblidad
▪ En el futuro veremos hacia donde quieren orientar su uso:
solo para nuevas Apis.
Nueva interfaz Date and Time.
▪ Date/Time API ha sido movido al paquete java.time and
(Joda time format).
▪ La mayor parte de la clases son Threadsafe and immutable.
▪ LocalTime (Horas)
▪ LocalDate (Fechas)
▪ LocalDateTime (fechas y horas)
▪ Duration, Period (Operaciones sobre duración y periodos de
tiempo para operar con las clases local)
Frameworks que usan nuevas
features (Spring 4 :) )
▪ Interfaces call back aceptan expresiones lambdas y
referencias de métodos.
▪ Jsr 310 types: soporte para nuevo java.time
▪ Anotaciones repetidas
Conclusiones
▪ Gran cambio en el lenguaje. Java no es un lenguaje
funcional, por ello no tiene la potencia de otros lenguajes
concebidos en ese paradigma.
▪ Java se ha limitado a copiar, no ha creado nada nuevo,
dotando al lenguaje de clones de librerías de Fechas,
Lambdas existentes en otros lenguajes.
▪ No programar todo funcional, únicamente en lo necesario. ---
> lo que denominamos el efecto generics de java 1.5.
▪ Como siempre el hecho de que existan nuevas
funcionalidades dentro del lenguaje requieren de un esfuerzo
por parte del programador de asimilar su uso → efecto
programador deprated: bucles clásicos, clases con
variables estáticas vs enums etc...
▪ Oposición de las entidades a su implantación en producción.
Esto funciona y no se cambia!!!! Este es el más
importante, de momento solo para consumo propio o
nuevos desarrollos :(
Code: 1
Destination: London
Duration
Hours:1
Minutes: 30
NumPassengers: 180
NumSeats: 200
Price: 1000
Code: 2
Destination: Madrid
Duration
Hours:2
Minutes: 30
NumPassengers: 180
NumSeats: 255
Price: 800
Code: 3
Destination: Paris
Duration
Hours:3
Minutes: 30
NumPassengers: 199
NumSeats: 200
Price: 400
Code: 4
Destination: Japan
Duration
Hours:3
Minutes: 30
NumPassengers: 180
NumSeats: 200/180 (si
full flight)
Price: 2000
Ejemplo práctico vuelos
https://github.com/cristianprofile/testing-java1.8-features

Más contenido relacionado

PDF
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
PDF
Lenguajes Dinámicos en la Java Virtual Machine
PDF
Dynamic jvm
PPTX
Diapositivas de JAVA
PDF
TypeScript - Angular 2 - ionic 2
PDF
Desarrollo rápido de apps web con laravel - DevAcademy
PPTX
Equipo de Marketing de Paradigma Digital
PDF
Node para Javeros: Conoce a tu enemigo
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
Lenguajes Dinámicos en la Java Virtual Machine
Dynamic jvm
Diapositivas de JAVA
TypeScript - Angular 2 - ionic 2
Desarrollo rápido de apps web con laravel - DevAcademy
Equipo de Marketing de Paradigma Digital
Node para Javeros: Conoce a tu enemigo

La actualidad más candente (20)

PDF
Programación Reactiva con RxJava
PDF
Eleva tu capacidad con Groovy
PPTX
Caracteristicas de Java
PPTX
Framework Laravel
PPT
Tecnologia Java
PDF
Mapa conceptual de Java
ODP
Un vistazo a java 8
PDF
java,conceptos basicos
PPTX
Subprocesamiento Mùltiple
PPT
C1 java introduccion
PPT
C1 java introduccion
PDF
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
PDF
Lenguaje de programación Ruby
PDF
Programación Funcional y Orientada a Objetos con Asincronismos
PPT
PDF
Jruby On Rails. Ruby on Rails en la JVM
PPT
Java y sus caracteristicas
PPT
Java netbeans-clase-001
PPTX
PRIMERA PRESENTACION JAVA
Programación Reactiva con RxJava
Eleva tu capacidad con Groovy
Caracteristicas de Java
Framework Laravel
Tecnologia Java
Mapa conceptual de Java
Un vistazo a java 8
java,conceptos basicos
Subprocesamiento Mùltiple
C1 java introduccion
C1 java introduccion
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
Lenguaje de programación Ruby
Programación Funcional y Orientada a Objetos con Asincronismos
Jruby On Rails. Ruby on Rails en la JVM
Java y sus caracteristicas
Java netbeans-clase-001
PRIMERA PRESENTACION JAVA
Publicidad

Destacado (12)

PDF
Chuleta Github: La potencia con control !!!!
PPTX
El coste de no usar integración continua
PPTX
Curso Spring Roo Spring Data Jpa Maven
PPTX
Maven Divide tu código, pruébalo y vencerás
PDF
Git: guia fácil para uso con Github
PDF
Desarrolla tu primera api con spring boot
PDF
Análisis estático de código en Java
PDF
Developing and deploying applications with Spring Boot and Docker (@oakjug)
PPTX
Integración Continua con Apps Xamarin
PDF
Service discovery in a microservice architecture using consul
PDF
Microservice With Spring Boot and Spring Cloud
PDF
Drone Continuous Integration
Chuleta Github: La potencia con control !!!!
El coste de no usar integración continua
Curso Spring Roo Spring Data Jpa Maven
Maven Divide tu código, pruébalo y vencerás
Git: guia fácil para uso con Github
Desarrolla tu primera api con spring boot
Análisis estático de código en Java
Developing and deploying applications with Spring Boot and Docker (@oakjug)
Integración Continua con Apps Xamarin
Service discovery in a microservice architecture using consul
Microservice With Spring Boot and Spring Cloud
Drone Continuous Integration
Publicidad

Similar a Java 1.8:Road to Functional Language (20)

KEY
JRuby Al Rescate J2EE
PDF
Scala desde c# y JavaScript
PPT
Java world
PDF
Mapa conceptual java
PPTX
Fundamentos de Java
KEY
JRuby al Rescate de J2EE
PDF
[ES] Primeros pasos con la Plataforma Java
PDF
Java desde cero
PDF
09. Java desde Cero autor UNAM_1.111.pdf
PDF
Lenguaje de Programación Java
PPTX
Java 8 time to join the future
PDF
[ES] Introdución a la plataforma java
PDF
Manual.curso.de.java.desde.cero
PDF
Java desde Cero.pdf
PPTX
Mi lenguaje de programacion de preferencia
PPTX
Mi Lenguaje de Programacion de Preferencia
PDF
JAVA3.0
PDF
Java desde 0 pre
PDF
Java desde 0 pre
JRuby Al Rescate J2EE
Scala desde c# y JavaScript
Java world
Mapa conceptual java
Fundamentos de Java
JRuby al Rescate de J2EE
[ES] Primeros pasos con la Plataforma Java
Java desde cero
09. Java desde Cero autor UNAM_1.111.pdf
Lenguaje de Programación Java
Java 8 time to join the future
[ES] Introdución a la plataforma java
Manual.curso.de.java.desde.cero
Java desde Cero.pdf
Mi lenguaje de programacion de preferencia
Mi Lenguaje de Programacion de Preferencia
JAVA3.0
Java desde 0 pre
Java desde 0 pre

Último (11)

PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PPTX
Derechos_de_Autor_y_Creative_Commons.pptx
PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PPTX
Fundamentos de Python - Curso de Python dia 1
DOCX
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
PPTX
Conceptos basicos de Base de Datos y sus propiedades
PPTX
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
PPTX
sistemas de informacion.................
PPTX
Implementación equipo monitor12.08.25.pptx
PDF
Su punto de partida en la IA: Microsoft 365 Copilot Chat
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
Derechos_de_Autor_y_Creative_Commons.pptx
AutoCAD Herramientas para el futuro, Juan Fandiño
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
Fundamentos de Python - Curso de Python dia 1
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
Conceptos basicos de Base de Datos y sus propiedades
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
sistemas de informacion.................
Implementación equipo monitor12.08.25.pptx
Su punto de partida en la IA: Microsoft 365 Copilot Chat

Java 1.8:Road to Functional Language

  • 1. Java 1.8:Road to Functional Language Javier Antoniucci Cristian Romero Matesanz (cristian.romero@adesis.com)
  • 2. Presentación ▪ Cristian Romero Matesanz ▪ Ingeniero Informático Uc3m ▪ Colegiado 105 colegio Ingenieros Informáticos de Madrid ▪ Arquitecto Software Adesis Netlife ▪ 8 años de profesión ▪Especialista en Aplicaciones basadas en Java, J2ee, Spring. ▪Pragmático/ Obsesionado con realizar software probado. ▪Apasionado por el continuo aprendizaje dentro de la profesión (Spring Boot, Java 1.8, Spring Integration, Jhipsters, Neo4j etc....). ▪Amante y apasionado de la música electrónica. https://github.com/cristianprofile
  • 4. Concepto programación funcional ▪ Me: "Sofia, let's put the toys away. Is there a toy on the ground" ▪ Sofia: "Yes, the ball" ▪ Me: "Ok, put the ball in the box. Is there something else?" ▪ Sofia: "Yes, there is my doll" ▪ Me: "Ok, put the doll in the box. Is there something else?" ▪ Sofia: "Yes, there is my book" ▪ Me: "Ok, put the book in the box. Is there something else?" ▪ Sofia: "No, nothing else" ▪ Me: "Fine, we are done" “put inside the box all the toys that are on the ground". ▪ Podemos procesar varios juguetes a la vez, uno en cada mano ▪ Puede ir recogiendo los juguetes que más le interesen por cercanía primero Enfoque funcional Enfoque iterativo clásico
  • 5. Functional Interfaces ▪ Un único método abstracto ▪ N métodos default y estáticos ▪ Importante: pueden ser instanciadas usando lambdas (sin necesidad de realizar un new de una clase que la implemente). ▪ Deberían ir anotadas @FunctionalInterface (no obligatorio) ▪ Similitud con clases abstractas → diferencia las clases abstractas pueden tener estado e incluir constructores (las variables son final)
  • 7. Lambda ▪ Se puede definir como una función anónima (Método sin declaración). ▪ (arg1, arg2...) -> { body } ▪ (type1 arg1, type2 arg2...) -> { body }
  • 8. Instanciar @functionalinterfaces mediante lambdas (is magic :=) ▪ Instanciadas en tiempo de compilación
  • 9. Funciones en java (1/2) ▪ Existe la creencia que las funciones son nuevas en la versión java 1.8, pero en realidad todos las hemos usado desde java 5/6/7. Clase anónima
  • 11. Lambda recordatorio ▪ Lambda is only syntactic sugar to simplify the Function (or Whatever) interface implementation by an anonymous class. It has in fact absolutely nothing to do with functions. ▪ Java 8 does not know anything about functions. Functions are ordinary object with ordinary methods that we may call. Nothing more. ▪ Java solo dispone de funciones de uno o dos parámetros, si quiero más parámetros entonces necesitare la técnica de Currificar la función.
  • 12. Referencias estáticas a métodos y constructores ▪ Mecanismo que permite el acceso a métodos y constructores de manera sencilla ▪ Sintaxis: NombreClase::nombreMetodo ▪ Ejemplo: ▪ Math::addExact; ▪ Person::new;
  • 13. Referencias estáticas a métodos y constructores Referencia método estático Referencia método clase con un objeto arbitrario Referencia método de la clase con instancia de objeto especifica Referencia constructor Método Sin argumentos Método 1 argumento Método 1 argumento
  • 14. Referencias estáticas a métodos y constructores
  • 15. Lambdas e interfaces funcional: Cuál es su utilidad dentro de java? ▪ Los métodos permiten definir como parámetro de llamada una interfaz funcional: parámetro lambda.(función anónima) ▪ Java 8 ha reescrito y creado nuevas clases basadas en este potente mecanismo, de modo que podemos pasar como parámetro una lambda. ▪ Este enfoque permite usar gran parte de los mecanismos en los que se basa la programación funcional (no todos ya que java no fue concebido como un lenguaje funcional)
  • 16. Java Streams: bienvenido al mundo funcional!!!! ▪ Api añadida a las colecciones para permitir manipular de manera sencilla y funcional. ▪ Se basa en concepto de pipeline de operaciones: ▪ Operaciones intermedias: realizan una operación y devuelve un nuevo stream ▪ Operaciones terminales: produce un resultado y cierra el stream
  • 18. Java Streams: concepto de pipeline
  • 19. Java Streams: resumen de operaciones en Streams
  • 20. Java Streams: resumen de operaciones en Streams
  • 21. Java Streams: Stream versus parallel Stream!!!! ▪ Como hemos comentado una de las ventajas de la programación funcional era la posibilidad de procesar los elementos en paralelo ▪ Para ello java 1.8 ha introducido el concepto de paralellstream: stream().parallel(). ▪ Common fork-join thread pool problem. Bloqueos por uso compartido de hilos. (No todo podía ser bueno :) ) ▪ Posible workaround: (usamos un fork nuevo no el pool común) !!!!! Cuidado con la creación infinita de hilos !!!!!!
  • 22. Optional: Bye Bye Null Pointer!!!!
  • 23. Presentación clase Optional!!!! ▪ Clase introducida en java 1.8 para permitir valores opcionales.
  • 24. Métodos mas importantes clase Optional!!!!
  • 25. Métodos más importantes clase Optional!!!!
  • 26. Métodos más importantes clase Optional!!!
  • 27. Optional: No es oro todo lo que reluce!!!! ▪ Nuevas apis y métodos de Stream incluyen el uso de optionals (findFirst,findAny,max,min) ▪ Las antiguas apis siguen dando la posibilidad de devolver null. ▪ Difícil cambiar las apis por retrocompatiblidad ▪ En el futuro veremos hacia donde quieren orientar su uso: solo para nuevas Apis.
  • 28. Nueva interfaz Date and Time. ▪ Date/Time API ha sido movido al paquete java.time and (Joda time format). ▪ La mayor parte de la clases son Threadsafe and immutable. ▪ LocalTime (Horas) ▪ LocalDate (Fechas) ▪ LocalDateTime (fechas y horas) ▪ Duration, Period (Operaciones sobre duración y periodos de tiempo para operar con las clases local)
  • 29. Frameworks que usan nuevas features (Spring 4 :) ) ▪ Interfaces call back aceptan expresiones lambdas y referencias de métodos. ▪ Jsr 310 types: soporte para nuevo java.time ▪ Anotaciones repetidas
  • 30. Conclusiones ▪ Gran cambio en el lenguaje. Java no es un lenguaje funcional, por ello no tiene la potencia de otros lenguajes concebidos en ese paradigma. ▪ Java se ha limitado a copiar, no ha creado nada nuevo, dotando al lenguaje de clones de librerías de Fechas, Lambdas existentes en otros lenguajes. ▪ No programar todo funcional, únicamente en lo necesario. --- > lo que denominamos el efecto generics de java 1.5. ▪ Como siempre el hecho de que existan nuevas funcionalidades dentro del lenguaje requieren de un esfuerzo por parte del programador de asimilar su uso → efecto programador deprated: bucles clásicos, clases con variables estáticas vs enums etc... ▪ Oposición de las entidades a su implantación en producción. Esto funciona y no se cambia!!!! Este es el más importante, de momento solo para consumo propio o nuevos desarrollos :(
  • 31. Code: 1 Destination: London Duration Hours:1 Minutes: 30 NumPassengers: 180 NumSeats: 200 Price: 1000 Code: 2 Destination: Madrid Duration Hours:2 Minutes: 30 NumPassengers: 180 NumSeats: 255 Price: 800 Code: 3 Destination: Paris Duration Hours:3 Minutes: 30 NumPassengers: 199 NumSeats: 200 Price: 400 Code: 4 Destination: Japan Duration Hours:3 Minutes: 30 NumPassengers: 180 NumSeats: 200/180 (si full flight) Price: 2000 Ejemplo práctico vuelos https://github.com/cristianprofile/testing-java1.8-features