1. Un vistazo a Java 8
Septiembre 2018
Amador Marín - Germán González
2. Contenidos
● default and static methods in Interfaces
● forEach() method in Iterable interface
● Functional Interfaces and Lambda Expressions
● Java Stream API for Bulk Data Operations on Collections
● Java Time API
● Collection API improvements
● Concurrency API improvements
● Java IO improvements
● Miscellaneous Core API improvements
● Java ahora y lo que viene
3. default and static methods in Interfaces
Los métodos default (implementación por defecto) pueden ser agregados a cualquier interface.
Cualquier clase que implemente la interface pero que no haga override del método, obtendrá la
implementación por defecto.
Permitió agregar nuevos métodos a las interfaces sin romper todas las implementaciones ya existentes
(backward compatibility).
Los métodos static no pueden ser sobre escritos en las clases que implementan la interface. Si
agregamos la annotation @Override, obtendremos un error de compilación.
5. Functional Interfaces and Lambda Expressions
Una functional interface está definida como una interface con exactamente un método abstracto. También
puede tener muchos métodos default. Usan la annotation @FunctionalInterface (opcional). Nuevas functional
interfaces en java.util.function.
- Predicate: Recibe un argumento y retorna un Boolean.
- BinaryOperator: Recibe 2 argumentos y retorna uno del mismo
tipo.
- Function: Recibe un argumento de tipo T y retorna otro de tipo R.
6. Functional Interfaces and Lambda Expressions
Uno de los mayores beneficios de las functional interface es la posibilidad de usar lambda expressions.
La sintaxis principal es “parameters -> body”.
Hay 4 reglas de oro sobre la sintaxis:
- Es opcional declarar el tipo de los parámetros.
- Es opcional usar paréntesis si sólo tiene un parámetro.
- Es opcional usar llaves “{}”, a menos que necesites colocar varias sentencias o bloques de varias líneas.
- Es opcional el “return” si tienes una expresión simple que retorna un valor.
7. Java Stream API for Bulk Data Operations on
Collections
Se agregó el API java.util.stream para realizar diferentes operaciones a las Collection.
Permite ejecución secuencial o paralela (a diferencia del Iterator) que es muy útil para procesar valores
que no estén en orden y en grandes volúmenes. Algunos streams primitivos son: IntStream, DoubleStream, and
LongStream.
Algunos métodos son:
filter: Consultar por una condición en cada uno de los elementos del stream y generar una lista filtrada.
map: Aplica una función a cada elemento del stream.
reduce: Hacer una reducción de los elementos del stream usando una función de acumulación y retornando un
Optional.
sorted: Ordenar los elementos del stream pasando como parámetro un Comparator.
findFirst: Operación de corto circuito para encontrar el primer elemento que cumpla la condición.
8. <Java 8 Java 8
Clase Date en java.util y en java.sql.
Ambas con el mismo nombre.
Define clases separadas para Date, Time,
DateTime, Timestamp, Timezone.
java.util.Date contiene date y time,
mientras que java.sql.Date contiene sólo
date.
Métodos como plus, minus, format,
parsing, obtener partes separadas en
date/time.
Todas las clases Date son mutable, por lo tanto
no son thread safe.
Date Time API son inmutable y buenas para
ambientes multithreaded.
No proveen internacionalización, no hay
soporte para timezone
Funciona con el sistema ISO-8601 y con otros
calendarios no ISO (java.time.chrono).
Clase abstracta java.text.DateFormat para
el parsing y formatting. SimpleDateFormat. *
Métodos format() y parse() ya definidos en
todas las clases en vez de usar otra clase.
Java Time API
*Necesidad de usar librerías de terceros Joda Time.
9. Java ahora y lo que viene
Según Stackoverflow en su Developer Survey Results 2018, Java está en la posición 5 de 25, entre las
tecnologías más populares con un 45.3% (posición 2, si descartamos HTML, CSS, SQL). Java 8 (82%).
El JDK 8 de Oracle no recibirá más actualizaciones públicas después de Enero 2019.
A partir de Java 11 (~ Septiembre 2018):
- Oracle JDK y OpenJDK tendrán paridad de características.
- Java 9 no será más soportado y/o actualizado y no habrá más soporte para Java 10.
- Puedes descargar Oracle JDK gratis y usarlo para entornos de desarrollo, prueba, creación de prototipos o
demostración.
- Nuevo ciclo de lanzamiento semestral.
- Precio de implementaciones en Servidores y la Nube (Cloud) = $25 por procesador por mes, precio para
escritorios (Desktop) = $2.50 por usuario por mes (Java SE Subscription Data Sheet).
JDK 12 Early-Access Builds. Latest build: 12 (2018/9/20).