前言
本文主要介绍Lambda表达式,函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做”而我们要学习的Lambda表达式就是函数式思想的体现。
一、Lambda表达式是什么?
lambda是一个匿名函数,我们可以把lambda表达式理解为是一段可以传递的代码。lambda简明的地将代码或方法作为参数传递进去执行。“函数式编程”其核心是把函数作为值。
二、具体方法
1.lambda表达式的使用前提
(1)有一个接口,并且接口中只有一个抽象方法。
(2)必须要有上下文环境,才能推导出Lambda对应的接口。
2.标准格式
(形式参数)->{代码块}
注意:
形式参数 | 如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可。 |
---|---|
-> | 由英文中画线和大于符号组成,固定写法。代表指向动作。 |
代码块 | 是我们具体要做的事情,也就是以前我们写的方法体内容。 |
下面附上一段代码:
lambda方法
useFlyable((String s) ->{
System.out.println(s);
System.out.println("晴天");
});
//简写
useFlyable( s -> System.out.println("晴天"));
3.应用场景
| 有参无返回值抽象方法 | |
|-无参无返回值抽象方法-||
| 有参有返回值抽象方法| |
就以有参有返回值抽象方法举例:
public interface Addable {
int add(int x,int y);
}
public class AddableDemo {
public static void main(String[] args) {
//在主方法中调用useAddable方法
useAddable((int x,int y) -> {
return x + y;
});
}
private static void useAddable(Addable a) {
int sum = a.add(10, 20);
System.out.println(sum);
}
}
## 4.Lambda表达式的省略模式
1.如果只有一个参数,小括号可以省略。
2.如果代码块只有一条语句,可以省略大括号和分号,以及return关键字。
3.参数类型可以省略
//lambda方法
// useFlyable((String s) ->{
// System.out.println(s);
// System.out.println("晴天");
// });
useFlyable( s -> System.out.println("晴天"));
// useAddable((int x,int y)->{
// return x+y;
// });
//简写
useAddable(( x,y)-> x+y);
## Lambda表达式和匿名内部类的区别
不同点 | 阐述 |
---|---|
所需类型不同 | 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类- Lambda表达式:只能是接口。 |
实现原理不同 | 匿名内部类:编译之后,产生一个单独的.class字节码文件 - Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成。 |
使用限制不同 | 如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类;如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式。 |
三、总结
以上就是今天要讲的内容,本文仅仅简单介绍了Lambda表达式的使用方法以及部分注意事项,若有不足,请指正!