文章目录
函数式编程思想
- 函数式编程思想
- 函数式接口
- Lambda 的使用前提
- Lambda 的标准格式
- Lambda 极简特性
- 演示代码
与面向对象编程思想的区别: 1.面向对象的思想是做一件事情,找一个能解决这个事情的对象,调用对象的方法来完成事情 2.函数式编程思想是只要能获取到结果,谁去做的,以什么形式做的都不重要,关心的是结果,不关心过程
函数式接口有且仅有一个抽象方法的接口称之为“函数式接口”,基于函数式接口可以写 Lambda 表达式用来取代“匿名内部类”的代码语句
Lambda 的使用前提1.使用 Lambda
必须具有接口,且要求接口中有且仅有一个抽象方法,即接口必须是函数式接口 2.使用 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() { // 这个大括号是实现类的类体
// 实现方法compare
@Override
public 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);
}
}
}