El concepto de Java constructor reference es relativamente habitual cuando trabajamos con lambdas y Streams. Sin embargo muchas veces cuesta entender como funciona y que es lo que aporta. Vamos a ver un ejemplo sencillo en el cual hacemos una referencia a un constructor con Java 8 . Para ello nos vamos a apoyar en la clase Persona.
package com.arquitecturajava;
public class Persona {
private String nombre;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Persona(String nombre) {
super();
this.nombre = nombre;
}
}
Nosotros podemos construir una lista de personas a través de un array de cadenas usando una java constructor reference. El siguiente código nos muestra como hacerlo.
package com.arquitecturajava;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Principal {
public static void main(String[] args) {
List<String> lista=Arrays.asList("pepe","juan","pedro");
List<Persona> listaPersonas=lista.stream().map(Persona::new).collect(Collectors.toList());
for(Persona p:listaPersonas) {
System.out.println(p.getNombre());
}
}
}
Acabamos de crear tres personas e imprimirlas en la consola.
Java Constructor reference
Sin embargo es difícil ver cuando usar este tipo de sintaxis Persona:new para hacer referencia a los constructores. Un ejemplo que ayuda a clarificar es usar un array similar para construir un grupo de ficheros apoyandononos en el constructor de la clase File. Para ello nos vamos a apoyar en una clase helper que dispone de un método para crear un fichero.
package com.arquitecturajava;
import java.io.File;
import java.io.IOException;
public class IOUtil {
public static void crearFicheros(File fichero) {
try {
fichero.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Podemos utilizar este clase de utilidades y su método crear fichero para crear un grupo de ficheros usando streams y lambdas .
Veamos el código:
package com.arquitecturajava;
import java.io.File;
import java.util.Arrays;
import java.util.List;
public class Principal2 {
public static void main(String[] args) {
List<String> lista=Arrays.asList("pepe.txt","juan.txt","pedro.txt");
lista.stream().map(File::new).forEach(IOUtil::crearFicheros);
}
}
Con este sencillo código a nivel de expresiones lambda y streams se crea una lista de ficheros en la carpeta de nuestro proyecto de forma rápida.
Otros artículos relacionados