Lambda表达式是实现函数式接口的一种方法。所谓函数式接口就是只有一个抽象方法的接口。写法是:()->{方法体};下面来一步步理解lambda表达式。
1、平时我们在实现接口时,都是直接写一个实现类,如下代码
package eiji;
public class TestLambda {
public static void main(String[] args) {
Bird bird = null;
bird = new Bird();
bird.fly();
}
}
// 1、函数式接口
interface Fly{
void fly();
}
//2、实现类
class Bird implements Fly{
@Override
public void fly() {
System.out.println("我是一只小小小小鸟,飞不高");
}
}
2、用得不多的情况下,我们也可以把实现类从外面挪到类的里面,变成静态内部类。
package eiji;
public class TestLambda {
//3、静态内部类
public static class Bird implements Fly{
@Override
public void fly() {
System.out.println("我是一只小小鸟,想要飞");
}
}
public static void main(String[] args) {
Bird bird = null;
bird = new Bird();
bird.fly();
}
}
// 1、函数式接口
interface Fly{
void fly();
}
3、静态内部类也嫌麻烦的话还可以变成局部内部类。
public static void main(String[] args) {
//4、局部内部类
class Bird implements Fly{
@Override
public void fly() {
System.out.println("我是一只小小小小鸟,尝试飞");
}
}
Bird bird = null;
bird = new Bird();
bird.fly();
}
}
// 1、函数式接口
interface Fly{
void fly();
}
4、还可以在简化成匿名内部类,就是没有方法名,直接用接口或者父类名来new
public static void main(String[] args) {
Fly bird = null;
//5、匿名内部类--没有类名,直接上方法体
bird = new Fly(){
@Override
public void fly() {
System.out.println("我是一只小小小小鸟,不太高");
}
};
bird.fly();
}
}
// 1、函数式接口
interface Fly{
void fly();
}
5、比匿名内部类在简化就变成lambda表达式了。
public static void main(String[] args) {
bird = ()->{
System.out.println("我是一只小小小小鸟,飞高啦");
};
bird.fly();
}
}
// 1、函数式接口
interface Fly{
void fly();
}
6、此外,上面这个lambda表达式还可以再简便,变成下面的写法,但是这种写法的前提是接口中的方法的方法体只有一句话,不然还带用代码块包裹。
bird = ()-> System.out.println("我是一只小小小小鸟,飞高啦");
7、带参数的方法还可以将括号也省掉。
bird = s-> System.out.println("我是一只小小小小鸟,飞高啦");
// 1、函数式接口
interface Fly{
void fly(String s);
}
8、如果有多个参数,要去掉修饰符就都去掉,并且要带括号。
bird = (name,size)-> System.out.println("我是一只小小小小鸟,飞高啦");
// 1、函数式接口
interface Fly{
void fly(String name,double size);
}
以上就是对lambda表达式的理解,是学习了b站小狂神的视频之后的笔记,大家要看详细的视频请戳:https://www.bilibili.com/video/BV1V4411p7EF?p=10&spm_id_from=pageDriver