JDK8 lambda表示式學習筆記

2021-10-09 10:13:22 字數 2529 閱讀 2385

lambda表示式是jdk8引入的乙個新特性,lambda表示式是乙個匿名函式,可以把其理解為一段可以傳遞的**,使用lambda表示式可以寫出更為簡潔靈活的**。

匿名類

匿名類是一種類似本地類『、沒有名稱』的表示式,為了減少**中宣告的類的數量,它可以讓程式中的**更為簡潔,對於本地類,如果只需要使用到一次,可以讓匿名類取代。

使用lambda表示式

在匿名類中存在乙個問題,如果該匿名類的實現非常簡單(如只能包含乙個方法的介面),那匿名類的語法就比較笨重且不清晰,lambda表示式使您可以更緊湊地表達單方法類的例項。

//使用匿名類實現

runnable x=new runnable()

};//lambda表示式實現

runnable x2=()-> system.out.println("hello");

假如在開發一款應用程式時,需要開發到某個功能,如:在在所有的使用者中篩選出年齡大於30歲的

//使用者實體類

public class user

//儲存所有使用者集合

public static listuserlist= arrays.aslist(

new user("張三",23,"男"),

new user("李四",33,"女"),

new user("王五",26,"女"),

new user("趙六",40,"男")

) ;//通俗的寫法

//篩選所有大於三十歲的使用者

public static listlessuserage(listlist)

}return userlist;

}

class main 

}return userlist;

}@test

public void test()

}

以上的方式在實際中會表現的很脆弱,如果類結構和功能需求更替,為了適應新需求,需要重寫大量api

inte***ce myuser

class myuserimpl implements myuser

}public static listlessuserage1(listlist,myusermyuser)

}return userlist;

}@test

public void test()

通過實現myuser介面,來指定查詢條件,雖然這個方式比前面的方式要好一點——當改變user的結構時,你不需要重寫方法——但你仍然有一些額外的多餘的**:每乙個你計畫要在應用中執行的查詢,都需要乙個新的介面和實現類。

public static listlessuserage2(listlist,myusermyuser)

}return userlist;

}@test

public void test()

});}

這種方法減少了**量,這不需要為你想要執行的每個搜尋建立乙個新的類。但是,由於介面只包含乙個方法,因此匿名類的語法非常笨重。在這裡可以使用lambda表示式代替匿名類。

public static listlessuserage3(listlist,myusermyuser)

}return userlist;

}@test

public void test()

lambda表示式組成

lambda表示式特徵

簡單例項:

// 1. 不需要引數,返回值為 5  

() -> 5

// 2. 接收乙個引數(數字型別),返回其2倍的值

x -> 2 * x

// 3. 接受2個引數(數字),並返回他們的差值

(x, y) -> x – y

// 4. 接收2個int型整數,返回他們的和

(int x, int y) -> x + y

// 5. 接受乙個 string 物件,並在控制台列印,不返回任何值(看起來像是返回void)

(string s) -> system.out.print(s)

//6定義return,必須大括號

()-> ;

變數作用域

1、lambda 表示式不能在 lambda 內部修改定義在域外的區域性變數,否則會編譯錯誤。

int i = 0;

base base = () -> ;

2、在 lambda 表示式當中不允許宣告乙個與區域性變數同名的引數或者區域性變數

int i = 0;

//編譯報錯

base base = (i) -> ;

何時使用

jdk8 Lambda 表示式詳解

lambda表示式主要是用來替換匿名內部類。必須配合函式介面一起使用。jdk中大多數介面已經被宣告為函式介面 必須使用 functionalinte ce宣告,並且,介面中只能有乙個抽象方法,可以有其他的預設方法 default 或靜態方法 static functionalinte ce publ...

jdk8 lambda表示式的使用

runnable runnable3 system.out.println 執行了.new thread runnable3 start new thread system.out.println 執行了.start comparatorcom new comparator comparatorco...

jdk8新特性 lambda表示式

1 什麼是lambda表示式?lambda表示式 也叫做閉包 是jdk8中的新語法,它允許我們將函式當成引數傳遞給某個方法或者將 本身作為資料進行處理。2 lambda表示式示例 2.1 用lambda表示式實現runnable 通過匿名內部類方法重寫runnable介面 new thread ne...