Una introducción rápida a Java 8 Lambdas

Una introducción rápida a Java 8 Lambdas / Programación

Si usted es un programador de Java y está interesado en aprender más acerca de las lambdas de Java 8, en este artículo analizaremos la sintaxis y el uso de lambda.

UNA expresión lambda en Java es una forma concisa de expresar un método de una clase en una expresión. Tiene una lista de parámetros y un cuerpo. El cuerpo puede ser una sola expresión o un bloque. 10 Conceptos básicos de Java que debe aprender al comenzar. 10 Conceptos básicos de Java que debe aprender al comenzar. Si está escribiendo una GUI, desarrollando software del lado del servidor o una aplicación móvil con Android, Aprender Java te servirá bien. Aquí hay algunos conceptos básicos de Java para ayudarte a comenzar. Lee mas . Se usa comúnmente cuando se requiere una implementación de una interfaz. Esta necesidad generalmente surge cuando se requiere una interfaz como argumento para invocar un método..

Algunas expresiones Lambda simples

Veamos algunos ejemplos simples de expresiones lambda.

La siguiente es una expresión lambda que acepta dos números. X y y y calcula la suma.

(int x, int y) -> x + y; 

Descarte los tipos de parámetros para una representación más concisa:

(x, y) -> x + y; 

Definir una función que no acepta parámetros:

() -> 404; 

Lo siguiente también es válido, que no acepta parámetros y no devuelve nada:

() ->  

No es necesario que los paréntesis incluyan parámetros para un solo parámetro:

x -> x + 1 

También son posibles bloques de código más complejos. La siguiente lambda acepta una sola línea parámetro y hace algún procesamiento en él. Tenga en cuenta que el tipo de parámetro se deduce del contexto que lo rodea:

line -> String [] x = pattern.split (line); devolver nuevo jugador (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4]));  

Codificación limpia y concisa

El uso de expresiones lambda ayuda a que su código sea limpio y conciso. Para ayudar en esto, las clases de Java 8 hacen un uso extensivo de las lambdas.

Bucle sobre una lista o un conjunto

Clases de colección como Lista, Conjunto, Cola, y tal implementar el Iterable Interfaz que facilita mucho el bucle sobre los elementos..

Declara una lista de nombres.

Lista names = Arrays.asList ("Joe", "Jack", "James", "Albert"); 

Recorre la lista sin lambda:

para (nombre de cadena: nombres) System.out.println (nombre);  

Usando lambda, el bucle anterior se puede escribir como:

names.forEach (name -> System.out.println (name)); 

Con las referencias de métodos de Java 8, lo anterior se puede escribir de manera aún más concisa como:

names.forEach (System.out :: println); 

Bucle sobre un mapa

UNA Mapa Es un mapeo de claves a valores. Recorrer un mapa implica un bucle sobre cada uno de los mapas (clave, valor). Compara cómo puedes usar las lambdas para esta situación.

Primero define un mapa:

Mapa map = new HashMap <> (); map.put ("Atlanta, Georgia", 110); map.put ("Austin, Texas", 115); map.put ("Baltimore, Maryland", 105); map.put ("Birmingham, Alabama", 99); map.put ("Boston, Massachusetts", 98); 

Puedes recorrer este mapa de la manera tradicional:

para (Map.Entry e: map.entrySet ()) System.out.println (e.getKey () + "=>" + e.getValue ());  

Aquí es cómo puede hacer lo mismo de una manera rápida y concisa usando lambdas:

map.forEach ((k, v) -> System.out.println (k + "=>" + v)); 

Interfaces funcionales

¿Cuál es el tipo de retorno de una expresión lambda? En otras palabras, ¿cuál es el tipo de X en la siguiente declaración?

X x = a -> a + 1; 

El tipo de retorno de una expresión lambda es un interfaz funcional - Una interfaz con un solo método abstracto. Puede asignar una expresión lambda a una interfaz con un método abstracto compatible. Algunos ejemplos a continuación.

Creando una tarea multi-hilo

Considere crear una tarea para ejecutar en un hilo separado. 4 Métodos para escribir código multihilo en Java. 4 Métodos para escribir código multihilo en Java. En este artículo, comparamos algunas opciones para escribir código multihilo en Java, por lo que puedes juzgar mejor qué opción usar para tu próximo proyecto Java. Leer más: debe definir la tarea como un Ejecutable Interfaz e implementar el correr() método. aquí Ejecutable es una interfaz funcional.

la clase MyTask implementa Runnable … public void run () // implementa tu tarea aquí System.out.println ("Se ejecuta en un subproceso separado ahora."); … 

A continuación, puede crear una instancia de la Mi tarea Clase y usarlo para iniciar un nuevo hilo de ejecución..

Tarea MyTask = nueva MyTask (); Hilo de rosca = Nuevo Hilo (tarea); thread.start (); 

Usando un lambda, el proceso de crear un Ejecutable se vuelve mucho más fácil. La definición de tarea anterior se puede reescribir como:

Tarea ejecutable = () -> System.out.println ("Ejecutando en un subproceso separado ahora."); 

O incluso:

Thread thread = new Thread (() -> System.out.println ("Se está ejecutando en un hilo separado ahora.")); thread.start (); 

Comparación usando un comparador

los Comparador es una interfaz funcional para comparar objetos de un tipo dado. Define un solo método abstracto llamado comparar() que se puede definir usando una expresión lambda.

Aquí hay una expresión lambda creando un Comparador Se utiliza para comparar cadenas de forma insensible.

Comparador cmp = (x, y) -> x.compareToIgnoreCase (y); 

Una vez que una instancia de la Comparador Se ha creado la interfaz funcional, se puede reutilizar según sea necesario..

Aquí, ordenamos una lista de cadenas en orden ascendente.

Lista names = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (nombres, cmp); names.forEach (System.out :: println); // impresiones de Albert Jack James Joe 

La lista anterior está ordenada en su lugar. Ahora podemos buscarlo usando el búsqueda binaria() método de la siguiente manera:

System.out.println ("search (Joe):" + Collections.binarySearch (names, "Joe", cmp)); # imprime la búsqueda (Joe): 3 

También es fácil calcular el máximo y el mínimo de una lista utilizando las lambdas.

Definir algunos datos:

Lista temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88); 

Use una expresión lambda para definir el comparador:

Comparador cmpTemp = (x, y) -> Integer.compare (x, y); 

E imprime el máximo y el mínimo:

System.out.println ("------ Max / Min ------"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp)); 

Uso en la programación GUI

Las expresiones Lambda también son extremadamente útiles en la programación de GUI para implementar controladores de eventos. Aquí hay un ejemplo del uso de un controlador de clic de botón.

Botón JButton = nuevo JButton ("Click Me"); button.addActionListener (e -> System.out.println ("Button clicked!")); 

Y eso fue un vistazo rápido al uso de lambdas en Java 8.

¿Las lambdas han hecho tu vida más fácil desde Java 8? Por favor explique en los comentarios a continuación..

Explorar más sobre: ​​Java.