SlideShare a Scribd company logo
1 of 31
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

More Related Content

What's hot

What's hot (20)

Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJava
 
Eleva tu capacidad con Groovy
Eleva tu capacidad con GroovyEleva tu capacidad con Groovy
Eleva tu capacidad con Groovy
 
Caracteristicas de Java
Caracteristicas de JavaCaracteristicas de Java
Caracteristicas de Java
 
Framework Laravel
Framework LaravelFramework Laravel
Framework Laravel
 
Tecnologia Java
Tecnologia JavaTecnologia Java
Tecnologia Java
 
Mapa conceptual de Java
Mapa conceptual de JavaMapa conceptual de Java
Mapa conceptual de Java
 
Un vistazo a java 8
Un vistazo a java 8Un vistazo a java 8
Un vistazo a java 8
 
java,conceptos basicos
java,conceptos basicosjava,conceptos basicos
java,conceptos basicos
 
Subprocesamiento Mùltiple
Subprocesamiento MùltipleSubprocesamiento Mùltiple
Subprocesamiento Mùltiple
 
C1 java introduccion
C1 java introduccionC1 java introduccion
C1 java introduccion
 
C1 java introduccion
C1 java introduccionC1 java introduccion
C1 java introduccion
 
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
 
Lenguaje de programación Ruby
Lenguaje de programación RubyLenguaje de programación Ruby
Lenguaje de programación Ruby
 
Programación Funcional y Orientada a Objetos con Asincronismos
Programación Funcional y Orientada a Objetos con AsincronismosProgramación Funcional y Orientada a Objetos con Asincronismos
Programación Funcional y Orientada a Objetos con Asincronismos
 
Java
JavaJava
Java
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicas
 
Java netbeans-clase-001
Java netbeans-clase-001Java netbeans-clase-001
Java netbeans-clase-001
 
PRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVAPRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVA
 
Java
JavaJava
Java
 

Viewers also liked

Chuleta Github: La potencia con control !!!!
Chuleta Github: La potencia con control !!!!Chuleta Github: La potencia con control !!!!
Chuleta Github: La potencia con control !!!!Cristian Romero Matesanz
 
Maven Divide tu código, pruébalo y vencerás
Maven Divide tu código, pruébalo y vencerásMaven Divide tu código, pruébalo y vencerás
Maven Divide tu código, pruébalo y vencerásCristian Romero Matesanz
 
Desarrolla tu primera api con spring boot
Desarrolla tu primera api con spring bootDesarrolla tu primera api con spring boot
Desarrolla tu primera api con spring bootCloudAppi
 
Análisis estático de código en Java
Análisis estático de código en JavaAnálisis estático de código en Java
Análisis estático de código en JavaCésar Hernández
 
Developing and deploying applications with Spring Boot and Docker (@oakjug)
Developing and deploying applications with Spring Boot and Docker (@oakjug)Developing and deploying applications with Spring Boot and Docker (@oakjug)
Developing and deploying applications with Spring Boot and Docker (@oakjug)Chris Richardson
 
Integración Continua con Apps Xamarin
Integración Continua con Apps XamarinIntegración Continua con Apps Xamarin
Integración Continua con Apps XamarinJavier Suárez Ruiz
 
Service discovery in a microservice architecture using consul
Service discovery in a microservice architecture using consulService discovery in a microservice architecture using consul
Service discovery in a microservice architecture using consulJos Dirksen
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudEberhard Wolff
 
Drone Continuous Integration
Drone Continuous IntegrationDrone Continuous Integration
Drone Continuous IntegrationDaniel Cerecedo
 

Viewers also liked (12)

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

Similar to Java 1.8: Road to Functional Language

Mapa conceptual java
Mapa conceptual java Mapa conceptual java
Mapa conceptual java hack-13
 
Fundamentos de Java
Fundamentos de Java Fundamentos de Java
Fundamentos de Java jmosorio777
 
[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma JavaEudris Cabrera
 
09. Java desde Cero autor UNAM_1.111.pdf
09. Java desde Cero autor UNAM_1.111.pdf09. Java desde Cero autor UNAM_1.111.pdf
09. Java desde Cero autor UNAM_1.111.pdfIrene619127
 
Lenguaje de Programación Java
Lenguaje de Programación JavaLenguaje de Programación Java
Lenguaje de Programación JavaDuvan Zuluaga
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the futureParadigma Digital
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java Eudris Cabrera
 
Manual.curso.de.java.desde.cero
Manual.curso.de.java.desde.ceroManual.curso.de.java.desde.cero
Manual.curso.de.java.desde.ceroLalo Pérez
 
Mi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de PreferenciaMi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de PreferenciaNelson Rivera
 
Mi lenguaje de programacion de preferencia
Mi lenguaje de programacion de preferenciaMi lenguaje de programacion de preferencia
Mi lenguaje de programacion de preferenciaNelson Rivera
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 prejtk1
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 prejtk1
 

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

JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Scala desde c# y JavaScript
Scala desde c# y JavaScriptScala desde c# y JavaScript
Scala desde c# y JavaScript
 
Java world
Java worldJava world
Java world
 
Mapa conceptual java
Mapa conceptual java Mapa conceptual java
Mapa conceptual java
 
Fundamentos de Java
Fundamentos de Java Fundamentos de Java
Fundamentos de Java
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java
 
Java desde cero
Java desde ceroJava desde cero
Java desde cero
 
09. Java desde Cero autor UNAM_1.111.pdf
09. Java desde Cero autor UNAM_1.111.pdf09. Java desde Cero autor UNAM_1.111.pdf
09. Java desde Cero autor UNAM_1.111.pdf
 
JAVA
JAVAJAVA
JAVA
 
Lenguaje de Programación Java
Lenguaje de Programación JavaLenguaje de Programación Java
Lenguaje de Programación Java
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the future
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java
 
Manual.curso.de.java.desde.cero
Manual.curso.de.java.desde.ceroManual.curso.de.java.desde.cero
Manual.curso.de.java.desde.cero
 
Java desde Cero.pdf
Java desde Cero.pdfJava desde Cero.pdf
Java desde Cero.pdf
 
Mi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de PreferenciaMi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de Preferencia
 
Mi lenguaje de programacion de preferencia
Mi lenguaje de programacion de preferenciaMi lenguaje de programacion de preferencia
Mi lenguaje de programacion de preferencia
 
JAVA3.0
JAVA3.0JAVA3.0
JAVA3.0
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 pre
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 pre
 

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