JAVA 8

java82

Es la versión más reciente de Java que incluye nuevas características, mejoras y correcciones de bugs para mejorar la eficacia en el desarrollo y la ejecución de programas Java. Incorporando varias novedades siguiendo la tendencia de otros lenguajes como la de lambdas o closures o una demandada nueva API para el manejo de fechas entre otras muchas características más. La lista completa de novedades es bastante amplia, a continuación se resumirá lo más destacable:

  • Se añaden las expresiones lambda o closures y se adapta la API para usarlas en los sitios que se pueda.
  • Se definen nuevos perfiles compactos para dispositivos que no necesitan toda la API Java, esto es una alternativa a la modularización. Inicialmente la modularización era una característica que estaba planificada para Java 8 pero finalmente se ha aplazado a posteriores versiones.
  • Incluido nuevo motor de Javascript Nashorn que implementa ECMAscript 5.1 y es más rápido que su predecesor Rhino.
  • Eliminación de espacio de memoria Permanent Generation (PermGen) que pasa a llamarse Metaspace. Su tamaño será dinámico pero no evitará fugas de memoria.
  • Soporte para la creación de una máquina virtual menor a 3 MB.
  • Acceso mediante reflection a los nombres de los parámetros. Mejorará la legibilidad del código que use reflection y permitirá mejorar el soporte en los IDE.
  • Ordenación en java.util.Arrays de forma paralela.
  • Operaciones masivas sobre colecciones tales como filter/map/reduce (streams) de forma serializada o paralela.
  • Soporte de forma estándar para la codificación y decodificación Base64.
  • Nueva API para Date y Time.
  • Varias mejoras de seguridad.
  • Se incorporan en la máquina virtual Java HotSpot características que estaban en JRockit, convergiendo ambas máquinas virtuales. Se incorpora Mission Control.
  • Mejoras en JDBC la base para el acceso en bases de datos en Java.
  • Entre otras…

java8

¿QUE SON LOS STREAMS?

Los streams no son un nuevo tipo de colección, son una nueva forma de recorrer las colecciones distinta a los Iterator. La ventaja de los streams es que pueden procesarse de forma serializada o paralela y proporcionan un estilo de operaciones más funcionales. Un flujo consiste una fuente (una colección), varias operaciones intermedias (de filtrado o transformación) y una operación final que produce un resultado (suma, cuenta…). Los streams son lazy de modo que las operaciones solo se realizan cuando se llama a la operación final, también son eficientes no necesitando en algunos casos procesar todos los elementos del stream para devolver el resultado final.

Tradicionalmente en la API de colecciones la iteración sobre los elementos debíamos proporcionarla de forma externa. Con Java 8 podemos expresarla de la siguiente forma.

 
int alturaMedia = personas.stream()
.mapToInt((Persona p) –> { return p.getAltura(); })
.average();

¿QUE ES LAMBDA?

Esta es una de las principales novedades y que más se estaba echando de menos en Java de otros lenguajes como Groovy o Python. Las expresiones lambda son funciones que no está asociadas a un determinado nombre y que pueden pasarse como argumento a otras funciones. Tienen el siguiente aspecto:

1
(Persona persona) –> { return persona.getAltura(); }
El uso de expresiones lambdas junto con el stream API proporciona a Java 8 características de programación funcional, pero sobre todo hace el código más sencillo, menos extenso, más expresivo y más legible. En las expresiones lambda de Java podemos seguir aprovechándonos de la compilación estática y del tipado fuerte.
java81

REFERENCIAS DE MÉTODOS

Todo el código desarrollado previamente a Java 8 no hace uso de las lambdas, pero con las referencias a métodos podemos usar esos métodos ya implementados como si se tratasen de funciones lambdas. Hay diferentes formas de hacer referencias a métodos:

  • A métodos estáticos
  • A un método de una instancia concreta
  • A un método de instancia de una instancia arbitraria de un tipo
  • A un constructor
 
// Método estático
Persona::compareAltura
// Método de una instancia concreta
persona::getAltura
// Método de instancia de una instancia arbitraria de un tipo
Persona::getAltura
// Constructor
Persona::new
Entre otras series de características que podemos destacar del nuevo java 8.

About Author

NGuerrero