文章目录
- 1、什么是Lambda表达式
- 2、为什么使用Lambda表达式
- 3、函数式接口(lambda表达式的使用前提)
- 4、推导Lambda表达式
- 5、Lambda表达式语法
1、什么是Lambda表达式
Lambda表达式,也可称为闭包。其本质属于函数式编程的概念,是Java8发布的最重要的新特性。
2、为什么使用Lambda表达式
- 避免匿名内部类定义过多
- 可以写出更简洁、更灵活的代码,只留下来核心的逻辑
3、函数式接口(lambda表达式的使用前提)
- 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
public interface Runnable{public abstract void run();
}
- 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
4、推导Lambda表达式
由外部类、成员内部类、静态内部类、局部内部类、匿名内部类推导出Lambda表达式(使用前提必须是实现函数式接口)
/*** 代码推导Lambda表达式*/
public class LambdaDemo {/*** 成员内部类*/class Love2 implements ILove {@Overridepublic void run() {System.out.println("我是成员内部类");}}/*** 静态内部类*/static class Love3 implements ILove {@Overridepublic void run() {System.out.println("我是静态内部类");}}public static void main(String[] args) {/*** 局部内部类(在main里)*/class Love4 implements ILove {@Overridepublic void run() {System.out.println("我是局部内部类");}}/*** 匿名内部类(没有类的名称,必须借助接口或者父类)*/ILove love5 = new ILove() {@Overridepublic void run() {System.out.println("我是匿名内部类");}};/*** 用Lambda简化*/ILove love6 = () -> {System.out.println("我是Lambda简化版");};//1.外部内部类方式ILove love1 = new Love1();love1.run();//2.成员内部类方式LambdaDemo lambdaDemo = new LambdaDemo();ILove love2 = lambdaDemo.new Love2();love2.run();//3.静态内部类方式ILove love3 = new Love3();love3.run();//4.局部内部类ILove love4 = new Love4();love4.run();//5.匿名内部类love5.run();//6.用Lambda简化love6.run();}
}//定义一个函数式接口
interface ILove {void run();
}/*** 外部实现类*/
class Love1 implements ILove {@Overridepublic void run() {System.out.println("我是外部类");}
}
运行结果
5、Lambda表达式语法
Lambda表达式在Java语言中引入了一个操作符==->==,该操作符被称为Lambda操作符或箭头操作符。它将Lambda分为两个部分:
- 左侧:指定了Lambda表达式需要的所有参数
- 右侧:制定了Lambda体,即Lambda表达式要执行的功能。
(parameters) -> expression[表达式](parameters) -> statement[语句](parameters) -> {statement}
(1)语法格式一:无参,无返回值,Lambda体只需一条语句。如下:
public class LambdaDemo {public static void main(String[] args) {Ilove love = null;love = ()->{System.out.println("接口方法无参数,无返回值" );};love.run();}
}
interface ILove {void run();
}
(2)语法格式二:有一个参数(此时参数类型和小括号都可以省略,代码只有一行的时候,花括号也可以省略),无返回值,
love = a-> System.out.println(“接口只有一个参数,无返回值” + a);
love = (a)-> System.out.println(“接口只有一个参数,无返回值” + a);
public class LambdaDemo {public static void main(String[] args) {Ilove love = null;//1.简化参数类型love = a->{System.out.println("接口只有一个参数,无返回值" + a);};love.run(1314);}
}
interface Ilove{void run(int a);
}public class LambdaDemo {public static void main(String[] args) {Ilove love = null;//2.简化花括号(代码只有一行时)love = a-> System.out.println("接口只有一个参数,无返回值" + a);love.run(1314);}
}
interface Ilove{void run(int a);
}
(3)语法格式三:有两个参数(参数类型可以省略,但小括号不可以省略),有返回值,并且Lambda体有多条执行语句。
public class LambdaDemo {public static void main(String[] args) {//1.简化参数类型Ilove love = (a, b) -> {System.out.println("接口只有两个个参数,有返回值");return a+b;};int run = love.run(1314, 521);System.out.println(run);}
}interface Ilove {int run(int a, int b);
}
(4)语法格式四:Lambda体只有一条语句(return和花括号都可以省略。如果花括号省略,return一定要省略)。
public class LambdaDemo {public static void main(String[] args) {//1.简化参数类型Ilove love = (a, b) -> a+b;int run = love.run(1314, 521);System.out.println(run);}
}interface Ilove {int run(int a, int b);
}