Conceptos básicos de Java-Expresión Lambda

Descripción general de la expresión lambda

Las expresiones lambda, también conocidas como cierres, son las características nuevas más importantes que promueven el lanzamiento de Java 8 .
Lambda permite que una función se utilice como parámetro de método (una función se pasa al método como parámetro) .
El uso de expresiones Lambda puede hacer que el código sea más conciso y compacto.
Las expresiones de Lamda también se denominan programación funcional .
Por ejemplo, y = kx + 1; f (x) = kx + 1; Esta es una función en matemáticas. Dada una x, puede obtener un valor de y. Las
expresiones lambda son programación orientada a la interfaz y orientada a la interfaz. Para la programación orientada a funciones, de acuerdo con el principio de orientada a la interfaz, es necesario definir una interfaz funcional .

Sintaxis de expresión lambda

Utilice clases internas anónimas para implementar una interfaz

(parameters) -> expression
或
(parameters) ->{
    
     statements; }

Caso de expresión lambda

interface Fooi{
    
    
	public void sayHello();
}
public class LambdaTest {
    
    
	public static void main(String[] args) {
    
    
		//接口不能new,使用匿名内部类
		Fooi foo = new Fooi(){
    
    
			@Override
			public void sayHello() {
    
    
				// TODO Auto-generated method stub		
				System.out.println("hello 2004");
			}	
		};
		foo.sayHello();
	}
}

Inserte la descripción de la imagen aquí
El programa aquí tiene originalmente solo una línea, pero se ha escrito mucho. Reducir la eficiencia del desarrollo del programa.
¿Cómo se puede optimizar?
La expresión lambda es para resolver el fenómeno de la redundancia de código de clase interna anónima
, podemos ver que esta interfaz tiene un solo método, y cuando queremos implementar esta interfaz, solo hay un método implementado. Es decir, puede saber qué método es sin especificarlo.
Fórmula de expresión lambda: copie los paréntesis, escriba la flecha derecha, las llaves de aterrizaje

interface Fooi{
    
    
	public void sayHello();
}
public class LambdaTest {
    
    
	public static void main(String[] args) {
    
    
		Fooi foo=() -> {
    
    System.out.println("hello 1205");};
		foo.sayHello();
	}
}

Inserte la descripción de la imagen aquí
El código detrás es solo dos líneas. Eficiencia de desarrollo significativamente mejorada.
Si ahora hay varios métodos, ¿se pueden seguir utilizando?

interface Fooi{
    
    
	public void sayHello();
	public int add(int x,int y);
}
public class LambdaTest {
    
    
	public static void main(String[] args) {
    
    
		Fooi foo=()->{
    
    System.out.println("hello 1205");};
		foo.sayHello();
	}
}

En este momento, el programa informa de un error:

Inserte la descripción de la imagen aquí
Se puede ver que solo se puede implementar un método en una interfaz funcional para usar expresiones Lambda.
Si hay parámetros con valores de retorno, ¿se pueden usar?

interface Fooi{
    
    
	public int add(int x,int y);
}
public class LambdaTest {
    
    
	public static void main(String[] args) {
    
    
		Fooi foo=(int x,int y)->{
    
    
			return x+y;
		};
		System.out.println(foo.add(3,5));
	}
}

Inserte la descripción de la imagen aquí
Se puede ver que el método tiene parámetros y los valores de retorno también pueden usar expresiones Lambda.

¿Cómo garantizar que la interfaz sea funcional?
Use la anotación @FunctionalInterface

para agregar dos métodos a la interfaz y se informará un error. como muestra la imagen:

@FunctionalInterface;
interface Fooi{
    
    
	public int add(int x,int y);
	public void sale();
}

Inserte la descripción de la imagen aquí
Se informará un error en este momento.
Si hay uno y solo un método no implementado en una interfaz, pero esta anotación no se agrega, Java agregará implícitamente esta anotación a la interfaz.
Si hay dos métodos en una interfaz y la anotación FunctionalInterface está definida, entonces se informará la excepción

Resumen de expresión lambda

Fórmula de expresión lambda: copie los paréntesis, escriba la flecha hacia la derecha
y use las anotaciones @FunctionalInterface

Supongo que te gusta

Origin blog.csdn.net/qq_39736597/article/details/111999982
Recomendado
Clasificación