La primera expresión de lambda
Antes de que apareciera Lambda, si necesitábamos escribir un Multithread, es posible que necesitemos el siguiente método:
Runnable runnable = new runnable () {@Override public void run () {System.out.println ("Hello Runnable"); }}; ... thread.start ();El ejemplo anterior será mucho más fácil si cambia a usar lambda:
Runnable noargs = ()-> system.out.println ("¡Hola lambda! ~"); ... thread.start ();Una expresión de Lambda es una función anónima que pasa un comportamiento como los datos. La expresión usa -> para separar los parámetros del cuerpo, -> para preceder a la parte del parámetro, y luego esta es la parte del cuerpo.
Otras formas de lambda
Binaryoperator <Along> add = (x, y)-> x+y; // o binaryoperator <Along> add = (largo x, largo y)-> x+y; // o binaryoperator <And> add = (long x, long y)-> {x+y; };Los anteriores son todas las formas de expresiones lambda.
Entonces la pregunta es:
¿Qué es Binaryoperator <Long> add = (largo x, largo y)-> x+y; ¿significar?
Esta línea de código no habla sobre agregar números, pero crea una función para calcular el resultado de agregar dos números. El tipo de ADD es BinaryOperator <Along>, que no es la suma de dos números, sino el código que agrega dos números. El siguiente ejemplo muestra cómo usar esta variable:
Binaryoperator <Along> add = (largo x, largo y)-> x+y; Larga res = add.apply (3l, 4l); System.out.println ("res ="+res); // salida: res = 7 Interfaz de función
Una interfaz de función es una interfaz con solo un método abstracto, utilizado como un tipo de expresión lambda.
Por ejemplo, Runnable es una interfaz de función.
Cree una nueva interfaz de función:
interfaz pública Adoperator <t, d> {long add (t one, d dos);}usar:
Adoperator <long, long> addoperator = (x, y)-> x +y; System.err.println ("Function de la función personalizada Res ="+Addoperator.Add (34L, 65L)); Tipo objetivo
El tipo objetivo se refiere al tipo de contexto en el que se encuentra la expresión de lambda. Por ejemplo, asigne una expresión de lambda a una variable local, o pasela a un método como parámetro. El tipo de parámetro de la variable local o del método es el tipo objetivo de la expresión de lambda.
Final
Si hacemos referencia a la variable local en el método en la clase interna anónima, esto requiere que la variable local sea definitiva.
En Lambda no necesitamos declarar la variable local externa referenciada como final, pero la variable solo se puede asignar una vez.
En el siguiente ejemplo, si eliminamos los comentarios y asignamos el nombre nuevamente, no se compilará y se mostrará un mensaje de error: las variables locales a las que se hace referencia desde una expresión de Lambda debe ser final o de manera efectiva final.
La variable local a la que se hace referencia por la expresión de Lambda debe ser final o una final objetiva.
Name de cadena = getUsername (); // name = "Hi"; Button.AdDactionListener (event-> System.out.println ("name ="+name)); Tipo de inferencia
La inferencia de tipo de expresiones lambda es una extensión de la inferencia de tipo de destino introducida en Java7.
Inferencia de tipo en Java7:
List <String> list = new ArrayList <> ();
En el ejemplo anterior, no especificamos el tipo de paradigma de ArrayList, sino que inferimos el tipo de paradigma de ArrayList en función del tipo de lista.
Por ejemplo: addoperator <long, long> addoperator = (x, y)-> x +y;
A través de este artículo, espero que pueda ayudarlo a aprender y comprender esta parte del conocimiento. ¡Gracias por su apoyo para este sitio web!