Java中Lambda表達(dá)式基礎(chǔ)及使用
標(biāo)準(zhǔn)格式:
三要素:形式參數(shù) 箭頭 代碼塊
格式:(形式參數(shù))->{代碼塊}
形式參數(shù):如果多個(gè)參數(shù)用逗號(hào)隔開,無參留空
->:英文中劃線和大于號(hào)組成
代碼塊:具體要做的事
使用前提:
有一個(gè)接口
接口中有且僅有一個(gè)抽象方法
一、舉例說明
1、無參無返回
1.1 定義一個(gè)接口
public interface Eatable {
void eat();
}
1.2接口實(shí)現(xiàn)類
public class EatableImpl implements Eatable{
@Override
public void eat() {
System.out.println("一天一蘋果");
}
}
1.3 測(cè)試類
public class EatableDemo {
public static void main(String[] args) {
//主方法調(diào)用useEatable
Eatable e = new EatableImpl();
useEatable(e);
//匿名內(nèi)部類
useEatable(new Eatable() {
@Override
public void eat() {
System.out.println("一天一蘋果");
}
});
//lambda表達(dá)式
useEatable(() -> {
System.out.println("一天一蘋果");
});
}
private static void useEatable(Eatable e){
e.eat();
}
}
2、有參無返回代碼示例
public interface Eatable {
void eat(String name);
}
public class EatDemo {
public static void main(String[] args) {
useEat((String name) -> {
System.out.println(name);
System.out.println("輸出的啥");
});
}
private static void useEat(Eatable e){
e.eat("蘋果");
}
}
3、有參有返回
public interface Addable {
int add(int x,int y);
}
1.
2.
3.
public class AddableDemo {
public static void main(String[] args) {
useAddable( (int x,int y ) -> {
return x+y;
});
}
private static void useAddable(Addable a){
int sum = a.add(5, 7);
System.out.println(sum);
}
}
二、簡(jiǎn)單事項(xiàng)
1、省略模式
- 參數(shù)的類型可省略,多個(gè)參數(shù)時(shí)候不可只省略一個(gè);
- 如果參數(shù)有且僅有一個(gè)可省略大括號(hào)和分號(hào);
- 如果代碼塊的語句只有一條,可省略大括號(hào)和分號(hào)(有return時(shí)return也省略掉)
2、注意事項(xiàng)
- 必須要有接口,接口中有且僅有一個(gè)抽象方法
- 必須有上下文環(huán)境,才能推導(dǎo)出Lambda對(duì)應(yīng)的接口:局部變量的賦值、調(diào)用方法的參數(shù)
三、Lambda表達(dá)式和匿名內(nèi)部類的區(qū)別
1、所需類型不同:
- 匿名內(nèi)部類:可以是接口,也可以是抽象類,還可以是具體類
- Lambda表達(dá)式:只能是接口
2、使用限制不同:
- 如果接口中有且僅有一個(gè)抽象類,兩者都可以使用
- 接口中多于一個(gè)抽象類,只能使用匿名內(nèi)部類
3、實(shí)現(xiàn)原理不同:
- 匿名內(nèi)部類:編譯之后,產(chǎn)生一個(gè)單獨(dú)的.class字節(jié)碼文件
- Lambda表達(dá)式:編譯之后,沒有單獨(dú)的.class字節(jié)碼文件,對(duì)應(yīng)的字節(jié)碼會(huì)在運(yùn)行時(shí)動(dòng)態(tài)的生成
到此這篇關(guān)于Java中Lambda表達(dá)式基礎(chǔ)及使用的文章就介紹到這了,更多相關(guān)Java中Lambda表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?對(duì)象在?JVM?中的內(nèi)存布局超詳細(xì)解說
這篇文章主要介紹了Java?對(duì)象在?JVM?中的內(nèi)存布局超詳細(xì)解說,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
SpringBoot整合Dubbo zookeeper過程解析
這篇文章主要介紹了SpringBoot整合Dubbo zookeeper過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
JSON字符串轉(zhuǎn)成java的Map對(duì)象詳細(xì)步驟
這篇文章主要介紹了如何將JSON字符串轉(zhuǎn)換為Java對(duì)象的步驟,包括定義Element類、使用Jackson庫解析JSON和添加依賴,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
Springboot中使用Filter實(shí)現(xiàn)Header認(rèn)證詳解
這篇文章主要介紹了Springboot中使用Filter實(shí)現(xiàn)Header認(rèn)證詳解,當(dāng)在?web.xml?注冊(cè)了一個(gè)?Filter?來對(duì)某個(gè)?Servlet?程序進(jìn)行攔截處理時(shí),它可以決定是否將請(qǐng)求繼續(xù)傳遞給?Servlet?程序,以及對(duì)請(qǐng)求和響應(yīng)消息是否進(jìn)行修改,需要的朋友可以參考下2023-08-08
劍指Offer之Java算法習(xí)題精講二叉樹專項(xiàng)解析
跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03
SpringBoot3利用AOP實(shí)現(xiàn)IP黑名單功能
在Web應(yīng)用開發(fā)中,控制對(duì)特定IP地址的訪問權(quán)限是一個(gè)常見的需求,通過實(shí)現(xiàn)IP黑白名單功能,我們可以允許某些IP地址訪問應(yīng)用,同時(shí)拒絕其他IP地址的訪問,本文將詳細(xì)介紹SpringBoot3利用AOP實(shí)現(xiàn)IP黑名單功能,并附上相應(yīng)的代碼片段,需要的朋友可以參考下2024-09-09

