Java基础-Lambda表达式

Lambda表达式概述

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
lamda表达式又称为函数式编程
如y=kx+1;f(x)=kx+1;这是数学中的函数,给定一个x,就能得到一个y的值
Lambda表达式又是面向接口的,面向接口编程。要想面向函数编程,按照面向接口的原则,就要定义一种函数式接口

Lambda表达式语法

使用匿名内部类实现一个接口

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

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();
	}
}

在这里插入图片描述
这里程序本来只有一行,但是写了这么多。降低了程序开发的效率。
如何能够优化呢?
Lambda表达式就是解决了匿名内部类代码冗余的现象
我们可以看到,这个接口只有一个方法,当我们想要实现这个接口时,实现的方法也只有1个。即不用指定就知道是哪一个方法了。
Lambda表达式口诀:拷贝小括号,写死右箭头,落地大括号

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

在这里插入图片描述
后面代码只有两行。明显的提高了开发的效率
如果现在有多个方法呢,还能使用吗?

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();
	}
}

此时程序报错:

在这里插入图片描述
可见,函数式接口中只能实现一个方法才能使用Lambda表达式
如果有参数有返回值可使用吗?

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));
	}
}

在这里插入图片描述
由此可见,方法有参数有返回值也可以使用Lambda表达式

如何保证接口是函数式接口呢?
使用@FunctionalInterface注解

给接口加上两个方法,就会报错。如图所示:

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

在这里插入图片描述
此时会报错。
如果一个接口里面有且仅有一个未实现的方法,但没有加上这个注解,java里面会隐式的为这个接口加上这个注解
如果一个接口里面有两个方法,并且定义了FunctionalInterface注解,就会报异常

Lambda表达式总结

Lambda表达式口诀:拷贝小括号,写死右箭头,落地大括号
@FunctionalInterface注解的使用

猜你喜欢

转载自blog.csdn.net/qq_39736597/article/details/111999982