面向對象的編程思想:
做一件事,找一個能解決這件事的對象,調用對象的方法完成事情
函數式編程思想:
只要能獲得結果,誰去做怎麼去做都不重要。只重視結果不重視過程
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排序的基本原理見另一篇筆記!!!