淺談Java中Lambda表達(dá)式的相關(guān)操作
為什么要使用Lambda?
可以對(duì)一個(gè)接口進(jìn)行非常簡(jiǎn)潔的實(shí)現(xiàn)。
Lambda對(duì)接口的要求?
接口中定義的抽象方法有且只有一個(gè)才可以。
傳統(tǒng)實(shí)現(xiàn)一個(gè)接口需要這樣做:
方法一:
// 實(shí)現(xiàn)接口,同時(shí)必須重寫接口中抽象方法
class Test implements IntrfacefN {
@Override
public void getUser(int a, int b) {
}
}
// @FunctionalInterface 注解意思:函數(shù)式接口,用來做規(guī)范,有這個(gè)注解,說明此接口有且只有一個(gè)抽象方法!??!
@FunctionalInterface
interface IntrfacefN{
public void getUser(int a, int b);
}
方法二:
匿名表達(dá)式
public class Lamda {
public static void main(String[] args) {
// 匿名表達(dá)式實(shí)現(xiàn)接口
IntrfacefN intrfacefN1 = new IntrfacefN(){
@Override
public void getUser(int a, int b) {
}
};
}
}
使用Lambda -> 只關(guān)注參數(shù)和方法體(返回值類型不需要寫、類型不需要寫)
public class Lamda {
public static void main(String[] args) {
// 實(shí)現(xiàn)接口,后邊匿名函數(shù)就是重寫的方法!
IntrfacefN intrfacefN = (int a, int b) -> System.out.println(a-b);
intrfacefN.getUser(1, 2);
}
}

不定參
@FunctionalInterface
interface IntrfacefN{
public void getUser(int... a);
}
public class Lamda {
public static void main(String[] args) {
IntrfacefN intrfacefN = (int ...a) -> {
for (int i = 0; i < a.length; i ++) {
System.out.println(a[i]);
}
};
intrfacefN.getUser(1, 2);
}
}

可省略的部分
參數(shù)類型
IntrfacefN intrfacefN = (a, b) -> System.out.println(a-b);
小括號(hào)
前提只有一個(gè)參數(shù)情況
IntrfacefN intrfacefN = a -> System.out.println(a);
方法大括號(hào)
方法體只有一句代碼
IntrfacefN intrfacefN = (a, b) -> System.out.println(a-b);
返回return
如果大括號(hào)中只有一條返回語句,則return 也可以省略
IntrfacefN intrfacefN = (a, b) -> {
return a-b
};
// 省略之后寫法:
IntrfacefN intrfacefN = (a, b) -> a-b;
高級(jí)部分
方法的引用
將一個(gè)Lambda表達(dá)式的實(shí)現(xiàn)指向一個(gè)已實(shí)現(xiàn)的方法,這樣做相當(dāng)于公共邏輯部分的抽離,實(shí)現(xiàn)復(fù)用。
public class Lamda {
public static void main(String[] args) {
IntrfacefN intrfacefN = (a, b) -> add(a, b);
intrfacefN.getUser(1, 2);
}
public static void add(int a, int b) {
System.out.println(a+b);
}
}
@FunctionalInterface
interface IntrfacefN{
public void getUser(int a, int b);
}
還有更簡(jiǎn)潔的實(shí)現(xiàn):
方法隸屬者:語法 - 方法隸屬者::方法名
補(bǔ)充下:這個(gè)方法隸屬者,主要看方法是類方法還是對(duì)象方法,如果是類 - 方法類::方法名 ,如果是對(duì)象方法 - new 方法類::方法名
public class Lamda {
public static void main(String[] args) {
IntrfacefN intrfacefN = Lamda::add;
intrfacefN.getUser(1, 2);
}
public static void add(int a, int b) {
System.out.println(a+b);
}
}
@FunctionalInterface
interface IntrfacefN{
public void getUser(int a, int b);
}
到此這篇關(guān)于淺談Java中Lambda表達(dá)式的相關(guān)操作的文章就介紹到這了,更多相關(guān)Java Lambda表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式實(shí)現(xiàn)步驟
這篇文章主要介紹了SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
java Volatile與Synchronized的區(qū)別
這篇文章主要介紹了java Volatile與Synchronized的區(qū)別,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12
maven實(shí)現(xiàn)docker自動(dòng)化部署插件的使用
本文主要介紹了maven實(shí)現(xiàn)docker自動(dòng)化部署插件的使用,分享給大家,感興趣的小伙伴們可以參考一下2021-06-06
java?SpringBoot?分布式事務(wù)的解決方案(JTA+Atomic+多數(shù)據(jù)源)
這篇文章主要介紹了java?SpringBoot?分布式事務(wù)的解決方案(JTA+Atomic+多數(shù)據(jù)源),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-08-08
Nacos啟動(dòng)出現(xiàn)failed to req API:/nacos/v1/ns/insta
這篇文章主要介紹了Nacos啟動(dòng)出現(xiàn)failed to req API:/nacos/v1/ns/instance after all servers問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Java使用強(qiáng)大的Elastisearch搜索引擎實(shí)例代碼
本篇文章主要介紹了Java使用強(qiáng)大的Elastisearch搜索引擎實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-05-05
解決java連接虛擬機(jī)Hbase無反應(yīng)的問題
這篇文章主要介紹了解決java連接虛擬機(jī)Hbase無反應(yīng)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
詳解MybatisPlus中@TableLogic注解的使用
@TableLogic一般用于實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)邏輯刪除,本文我們將介紹 @TableLogic 注解的用法,以及每個(gè)屬性的實(shí)際意義和用法,感興趣的可以了解一下2022-06-06

