一、函数式思想
面向对象的思想
做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情
函数式编程思想
只要能获取到结果,谁去做这么做的都不重要,重视的是结果,不是过程
二、冗余的Runnable代码
老式步骤
1、创建Runnable接口的实现类,重写run方法,设置线程任务
2、创建Runnbale接口实现类对象
3、创建Thread类对象,构造方法中传递Runnable接口的实现类
4、调用Start()方法,执行run方法
代码简化:使用匿名内部类,实现多线程程序
新式方法
//使用Lambda表达式,实现多线程
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"线程创建了");
}
).start();
三、匿名内部类
1、好处:
无参数:不需要任何条件即可执行该方案
无返回值:该方案不产生任何结果
代码块:该方案的具体执行步骤
2、坏处:复杂
四、Lambda表达式的标准格式
由三部分组成:
(参数列表)->{一些重写方法的代码};
():接口中抽象方法的参数列表,没有参数,就空着,多个参数用逗号分割
->:把参数传递给方法体
{}:重写接口的抽象方法的方法体
五、Lambda的省略格式
Lambda表达式:可推导,可省略;
可以省略的内容:
1、(参数列表):括号中的参数列表的数据类型,可以省略
2、(参数列表):括号中的参数只有一个,类型和()都可以省略
3、{一些代码}:如果代码只有一行,无论是否有返回值,可以一起省略{}、retrun、分号(必须一起省略)
六、Lambda使用前提
1、必须具有接口,要求接口中有且仅有一个抽象方法
2、必须有上下文推断
七、代码实现
/**
* 使用数组存储多个Person对象
* 对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序
*/
public class Test {
public static void main(String[] args) {
Person[] arr = {new Person("张三", 18),
new Person("李四", 20),
new Person("王五", 17)};
//匿名内部类
// Arrays.sort(arr, new Comparator<Person>() {
// @Override
// public int compare(Person p1, Person p2) {
// return p1.getAge() - p2.getAge();
// }
// });
//使用Lambda表达式,简化匿名内部类
Arrays.sort(arr,(Person p1,Person p2)->{
return p1.getAge()-p2.getAge();
});
//遍历数组
for (Person p : arr) {
System.out.println(p);
}
}
}
![]()