Anuncio

Si eres un programador de Java y estás interesado en aprender más sobre las lambdas de Java 8, en este artículo vamos a ver más de cerca 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 un solo expresión o un bloque 10 conceptos básicos de Java que debe aprender al comenzarYa sea que esté escribiendo una GUI, desarrollando software del lado del servidor o una aplicación móvil con Android, aprender Java le será de gran utilidad. Aquí hay algunos conceptos básicos de Java para ayudarlo a comenzar. Lee mas . Se usa comúnmente donde se requiere la implementación de una interfaz. Esta necesidad generalmente surge cuando se requiere una interfaz como argumento para invocar un método.

Algunas expresiones simples de Lambda

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.

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

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

(x, y) -> x + y; 

Defina una función que no acepte parámetros:

() -> 404; 

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

() -> {}

No hay necesidad de paréntesis que encierran 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 un solo línea parámetro y realiza algún procesamiento en él. Tenga en cuenta que el tipo de parámetro se infiere del contexto circundante:

línea -> { Cadena [] x = patrón.split (línea); 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 lambdas.

Recorriendo una lista o un conjunto

Clases de colección como Lista, Conjunto, Cola, y tal implementar el Iterable interfaz que hace que recorrer los elementos sea mucho más fácil.

Declarar una lista de nombres.

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

Recorrer la lista sin lambda:

for (String name: names) {System.out.println (name); }

Usando lambda, el bucle anterior se puede escribir como:

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

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

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

Recorriendo un mapa

UNA Mapa es un mapeo de claves a valores. Recorrer un mapa implica recorrer cada uno de los mapas (clave, valor). Compare cómo puede usar lambdas para esta situación.

Primero defina 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); 

Puede recorrer este mapa de la manera tradicional:

para (Mapa. Entrada e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }

Así es como 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 único método abstracto. Puede asignar una expresión lambda a una interfaz con un método abstracto compatible. Algunos ejemplos a continuación.

Crear una tarea multiproceso

Considere crear una tarea para ejecución en un hilo separado 4 métodos para escribir código multiproceso en JavaEn este artículo, comparamos algunas opciones para escribir código multiproceso en Java, para que pueda juzgar mejor qué opción usar para su próximo proyecto Java. Lee mas - debe definir la tarea como 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 ("Ejecutando en un hilo separado ahora"); }... }

Luego puede crear una instancia de Mi tarea clase y úsela para iniciar un nuevo hilo de ejecución.

Tarea MyTask = nuevo MyTask (); Subproceso de subproceso = nuevo subproceso (tarea); thread.start (); 

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

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

O incluso:

Thread thread = new Thread (() -> System.out.println ("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 único método abstracto llamado comparar() que se puede definir usando una expresión lambda.

Aquí hay una expresión lambda que crea un Comparador se usa para comparar cadenas sin distinción entre mayúsculas y minúsculas.

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

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

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

Lista nombres = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (nombres, cmp); names.forEach (System.out:: println); // impresiones. 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 (nombres, "Joe", cmp)); # impresiones. búsqueda (Joe): 3. 

Calcular el máximo y el mínimo de una lista también es fácil con 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 imprima el máximo y el mínimo:

System.out.println ("Máx. / Mín."); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp)); 

Uso en programación GUI

Las expresiones Lambda también son extremadamente útiles en la programación de la 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 ("¡Botón presionado!")); 

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

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