文章目录
- 函数式编程思想
- 函数式接口
- Lambda 的使用前提
- Lambda 的标准格式
- Lambda 极简特性
- 演示代码
函数式编程思想
与面向对象编程思想的区别:
1.面向对象的思想是做一件事情,找一个能解决这个事情的对象,调用对象的方法来完成事情
2.函数式编程思想是只要能获取到结果,谁去做的,以什么形式做的都不重要,关心的是结果,不关心过程
函数式接口
有且仅有一个抽象方法的接口称之为“函数式接口”,基于函数式接口可以写 Lambda 表达式用来取代“匿名内部类”的代码语句
Lambda 的使用前提
1.使用 Lambda
必须具有接口,且要求接口中有且仅有一个抽象方法,即接口必须是函数式接口
2.使用 Lambda
必须可以进行上下文推断,也就是方法的参数或者局部变量的数据类型必须是 Lambda
对应的接口类型,才能使用 Lambda
表达式作为该接口的实例对象
Lambda 的标准格式
(接口抽象方法的参数列表)->{实现抽象方法的代码}
Lambda 语句用来简化匿名内部类的代码,所以 Lambda 可以称为是“匿名内部类”的语法糖。
注:用来取代复杂代码语法的简化代码语法称为“语法糖”。
Lambda 极简特性
凡是可以根据上下文推导出的内容都可以省略不写,可以省略的内容如下:
1.参数列表的数据类型可以省略不写
2.参数列表中仅有一个参数,那么数据类型和小括号都可以省略不写
3.方法体中如果只有一行代码,那么可以把大括号 {}
、return
关键字、分号 ;
全部省略不写(切记,这个规则要求三者必须一起省略才行,否则会报错)
4.没有参数,需要保留小括号
演示代码
package priv.lwx.javaprac.lambda;import java.util.Arrays;
import java.util.Comparator;/*** @ClassName Demo01Lambda* @Description 使用Lambda表达式实现排序规则的演示代码* @Author liaowenxiong* @Version 1.0* @date 2021/8/28 上午8:56*/public class Demo01Lambda {public static void main(String[] args) {WhitePerson[] whitePeople = new WhitePerson[]{new WhitePerson("柳岩", 38, "green"),new WhitePerson("杨思敏", 45, "blue"),new WhitePerson("迪丽热巴", 28, "black")};// 使用匿名内部类实现排序规则Arrays.sort(whitePeople, new Comparator<WhitePerson>() { // 这个大括号是实现类的类体// 实现方法compare@Overridepublic int compare(WhitePerson o1, WhitePerson o2) { // 这个大括号是方法体// 前面的减去后面的,表示升序return o1.getAge() - o2.getAge();}});// 使用Lambda语句实现排序规则Arrays.sort(whitePeople, (WhitePerson o1, WhitePerson o2) -> { // 这个大括号是方法compare的方法体// 这是方法体中的实现代码return o1.getAge() - o2.getAge();});// 对Lambda语句进行简化,称之为Lambda表达式(Expression Lambda)Arrays.sort(whitePeople, (o1, o2) -> o1.getAge() - o2.getAge());// 排序后,将数组的元素打印输出for (WhitePerson whitePerson : whitePeople) {System.out.println(whitePerson);}}
}