
Michael Fisher
0
2325
540
Si eres un programador de Java y estás interesado en aprender más sobre Java 8 lambdas, en este artículo vamos a echar un vistazo más de cerca a 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 Ya sea que 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 ayudarlo a comenzar. . 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.
(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
Bloques de código más complejos también son posibles. 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); volver 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 de 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:
nombres.porCada (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 del mapa = nuevo 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 (Map.Entry 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 su ejecución en un hilo separado 4 Métodos para escribir código multiproceso en Java 4 Métodos para escribir código multiproceso en Java En este artículo, comparamos algunas opciones para escribir código multiproceso en Java, por lo que puedes juzgar mejor qué opción usar para tu próximo proyecto Java. - debe definir la tarea como Ejecutable interfaz e implementar el correr() método. aquí Ejecutable es una interfaz funcional.
class 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 comenzar 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 se puede reescribir 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 usado 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 de nombres = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (nombres, cmp); names.forEach (System.out :: println); // imprime 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)); # imprime búsqueda (Joe): 3
Calcular el máximo y el mínimo de una lista también es fácil usando lambdas.
Definir algunos datos:
List 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 ("------ Max / Min ------"); 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.