Para las expresiones básicas de gramática lambda, se trata de entender las expresiones básicas de gramática lambda, y la otra es la necesidad de entender la interfaz de la función
A, las expresiones lambda describir la gramática básica
introduce java8 nuevo operador ->, se puede llamar operador lambda o el operador de flecha, el operador estará dividida en dos partes expresión lambda.
Izquierda: lista de parámetros
Derecha: expresiones de código a ejecutar, que es el cuerpo lambda
lambda formato general son los siguientes:
La primera: no hay parámetros y no devuelve nada
La segunda: Hay parámetros, sin valor de retorno
Variante 1: el argumento de tipo se puede omitir
Variante 2: Existe un parámetro, el parámetro se puede omitir paréntesis
Tercero: No hay parámetros, valor de retorno
Variantes: declaración lambda cuerpo ejecución es único, se puede prescindir de los apoyos y de retorno del cuerpo lambda
Dos, muestra de expresiones lambda
1, una expresión, no hay parámetros y no devuelve ningún valor
/ * * * Lambda表达式一 * / público vacío test1 () { // jdk1.7之前 Ejecutable ejecutable = nueva Ejecutable () { @ Override pública vacío run () { Sistema. fuera .print ( " hola Ejecutable " ); } }; runnable.run (); Sistema. fuera .println ( " ============================= " ); // 使用lambda表达式 Ejecutable runnable1 = () -> Sistema. fuera.println ( " lambda hola " ); runnable1.run (); }
2, dos expresiones: No hay parámetros y no devuelve valor
pública vacío test2 () { Comparador <Integer> = comparador (entero x, Entero y) -> Integer.compare (x, y); }
Variante 1: el tipo de parámetro se puede omitir (esto se debe a que el compilador JVM puede inferirse del contexto del tipo en tiempo de compilación, para deducir el tipo de salida argumento; otra aquí y no tienen que ser omitidos se omiten, y algunos parámetros no se puede omitir, existe parámetro no se omite)
pública vacío test3 () { Comparador <Integer> comparador = (x, y) -> Integer.compare (x, y); }
Variante 2: Existe un parámetro, el parámetro se puede omitir paréntesis
pública vacío test4 () { Consumidor <String> consumidor = x -> Sistema. fuera .println (x); consumer.accept ( " Hola " ); }
Tercero: No hay parámetros, valor de retorno
pública vacío test5 () { Comparador <Integer> = comparador (entero x, Entero y) -> { log.info ( " test5 hola " ); retorno Integer.compare (x, y); }; }
Variantes: lambda cuerpo para llevar a cabo una sola declaración, usted puede regresar y tirantes cuerpo lambda omitido (de hecho, esto ya se ha demostrado, un tipo de la segunda variante)
pública vacío test3 () { Comparador <Integer> comparador = (x, y) -> Integer.compare (x, y); }
resumen:
En caso de los paréntesis de la provincia
Izquierdo de la inferencia de tipos Provincia
En tercer lugar, la función de interfaz
expresión lambda tiene que soportar la interfaz funcional, una interfaz de función de interfaz que es sólo una aplicación. Las anotaciones pueden ser utilizados para la prueba @FunctionalInterface
En cuarto lugar, la función de interfaz de la muestra (java8 ofrece cuatro funciones de interfaz de núcleo, el seguimiento se describirá)
Crear una interfaz de función
com.example.jdk8demo.lambda empaquetar; @FunctionalInterface pública interfaz MyInterface { Entero getInteger (entero i); }
Nuevas llamadas a métodos de interfaz de función
pública Entero getInteger (entero i, MyInterface mi) { volver mi.getInteger (i); }
El último paso consiste en expresiones lambda uso de lógica de aplicación específica
pública vacío test6 () { // obtener 10 cuadrados log.info ( " ============ " + getInteger ( 10 , (X) -> X * X)); }