Llega Java 8

Que hay de nuevo en Java 8?

Ya llevo tiempo programando en Java y toca recopilar un poco de información para ver que incluye la nueva versión de Java 8.

Esta vez escribo en Español porqué en Inglés ya hay mucha literatura al respecto.

Expresiones Lambda

Es una nueva funcionalidad del lenguaje que nos permite incluir “funcionalidad” a los parámetros de los métodos. Es mas que el “sintactic sugar” (como dicen algunos), pues el compilador puede usar el contexto de la expresión para determinar la interfaz usada y resolver el tipo de los parámetros automaticamente.

Un ejemplo de la frase anterior es lo siguiente:

En vez de:

(String str) -> System.out.println(str)

Podemos hacer:

str -> System.out.println(str)

Metodos “default”

Nos permite añadir funcionalidades en las interfaces. Esto nos permite también añadir nuevos métodos a las interfaces sin romper todas las implementaciones actuales (backwards compatibility).

El comportamiento de este tipo de métodos es el que podemos intuir por su nombre: Cualquier clase que implementa una interfaz pero no sobre-escribe el método, va a adquirir la implementación por defecto.

Nueva colección “Stream”

La interfaz “stream” nos permite realizar operaciones en un estilo funcional sobre stream de elementos. Representa la secuencia de objetos, de un modo similar a un iterador, pero permite su ejecución en paralelo. Permite operaciones típicas como “map”, “reduce” o “filter”.

Un ejemplo de uso de los nuevos “Streams”:

List stringCollection = new ArrayList<>();
stringCollection.add("ddd2");
stringCollection.add("aaa2");
stringCollection.add("bbb1");
stringCollection.add("aaa1");
stringCollection.add("bbb3");
stringCollection.add("ccc");
stringCollection.add("bbb2");
stringCollection.add("ddd1");
 
stringCollection
    .stream()
    .filter((s) -> s.startsWith("a"))
    .forEach(System.out::println);

Programación funcional

Java 8 trata de elevar las funciones en ciudadanos de primera dentro de la programación, justo como se trata en la programación funcional.

Por eso, se incluye la interfaz “Function”, el tipo de datos “Tuple” al mas puro estilo Scala, se añaden algunos tipos inmutable (DateTime, Streams o el Optional, así como ya lo son los String hoy en día).

Como ya hemos dicho, además de las expresiones, también incluyen nuevas interfaces que habilitan Java para un uso mas funcional. Un ejemplo de uso es el siguiente:

Function<String, String> atr = (name) -> {return "@" + name;};

Y como empezar?

Para terminar, podéis descargar Java Runtime Environment. Ahí tenéis un review con un botón al link para descargarlo.