面向对象的编程思想:
做一件事,找一个能解决这件事的对象,调用对象的方法完成事情
函数式编程思想:
只要能获得结果,谁去做怎么去做都不重要。只重视结果不重视过程
Lambda的使用前提:
1.使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法
无论是JDK内置的Runnable、Comparator接口还是自定义接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。
2.使用Lambda必须具有上下文推断
也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例
注意:有且仅有一个抽象方法接口称为函数式接口
具体实例:
//使用匿名内部类的方式实现多线程
new Thread(
new Runnable(){
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"新的线程已创建");
}
}
).start();
//使用Lambda的方式实现多线程
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"新的线程已创建");
}).start();
<!-----------------------------------------------------------------我是一条分界线---------------------------------------------------------!>
通过数组Arrays.sort对数组进行排序:
Person类:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
主程序:
import java.util.Arrays;
import java.util.Comparator;
public class LambdaArrays {
public static void main(String[] args) {
Person arr[]={
new Person("迪丽热巴",18),
new Person("古力娜扎",21),
new Person("马尔扎哈",20)
};
//传统方式
Arrays.sort(arr, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
});
for ( Person p :arr) {
System.out.println(p.getName()+p.getAge());
}
//Lambda表达式
Arrays.sort(arr,(Person p1,Person p2)->{
return p1.getAge()-p2.getAge();
});
for ( Person p :arr) {
System.out.println(p.getName()+p.getAge());
}
}
}
运行结果:
结果一样;
注意Arrays.sort排序的基本原理见另一篇笔记!!!