1. Lambda表達式的標準格式:
(1)一些參數
(2)一個箭頭
(3)一段代碼
格式:
(參數列表)->{一些重寫的代碼};
解釋說明
( ):接口中抽象方法的參數列表,沒有參數就空着,有參數就寫出參數,多個參數使用逗號分隔
->:傳遞的意思,將參數列表傳遞給方法體
{ }:重寫接口的抽象方法體
2. Lambda表達式的省略格式
凡是可以根據上下文進行推導的都可以省略
可以省略的內容:
(1)(參數列表):括號中參數列表的數據類型,可以省略不寫
(2)(參數列表):括號中的參數如果只有一個,那麼參數類型和()都可以省略
(3){一些代碼}:如果{}中的代碼只有一行,無論是否有返回值,都可以省略({},return,分號),但是三者必須同時省略
3. Lambda表達式的使用前提
(1)使用Lambda表達式必須有接口,而且接口中有且僅有一個抽象方法;
無論是JDK中內置的Runnable、Comparator接口還是自定義接口,只有當接口中的抽象方法存在且唯一時,纔可以使用Lambda表達式。
(2)使用Lambda表達式必須具有上下文推斷
方法的參數或局部變量類型必須爲Lambda表達式對應的接口類型,才能使用Lambda表達式作爲該接口的實例。
案例:
//使用匿名內部類實現線程
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("創建一個新線程");
}
}).start();
}
//使用Lambda表達式的方式實現線程
public static void main(String[] args) {
new Thread(()->{System.out.println("創建一個新線程");}).start();
}
public static void main(String[] args) {
person[] arr={
new person("aa",30),
new person("bb",10),
new person("cc",20)
};
//使用匿名方式實現
/*Arrays.sort(arr,new Comparator<person>(){
@Override
public int compare(person o1, person o2) {
return o1.getAge()-o2.getAge();
}
});*/
//使用Lambda表達式實現
Arrays.sort(arr,(person o1, person o2)-> {
return o1.getAge()-o2.getAge();
});
for (person person : arr) {
System.out.println(person);
}
}