Lambda使用方法

2021-09-25 16:46:39 字數 2345 閱讀 4705

lambda

的語法非常簡潔,完全沒有物件導向複雜的束縛。但是使用時有幾個問題需要特別注意:

1. 使用lambda

必須具有介面,且要求

介面中有且僅有乙個抽象方法

無論是jdk內建的

runnable

、 comparator

介面還是自定義的介面,只有當介面中的抽象方法存在且唯一

時,才可以使用

lambda。

2. 使用

lambda

必須具有

上下文推斷

也就是方法的引數或區域性變數型別必須為

lambda

對應的介面型別,才能使用

lambda

作為該介面的例項。

備註:有且僅有乙個抽象方法的介面,稱為

函式式介面」。

在lambda

標準格式的基礎上,使用省略寫法的規則為:

1. 小括號內引數的型別可以省略;

2. 如果小括號內

有且僅有乙個參,則小括號可以省略;

3. 如果大括號內

有且僅有乙個語句,則無論是否有返回值,都可以省略大括號、

return

關鍵字及語句分號。

有些場景的**執行後,結果不一定會被使用,從而造成效能浪費。而

lambda

表示式是延遲執行的,這正好可以

作為解決方案,提公升效能。

效能浪費的日誌案例注:

日誌可以幫助我們快速的定位問題,記錄程式執行過程中的情況,以便專案的監控和優化。

一種典型的場景就是對引數進行有條件使用,例如對日誌訊息進行拼接後,在滿足條件的情況下進行列印輸出:

public class demo01logger 

}public static void main(string args)

}

這段**存在問題:無論級別是否滿足要求,作為

log

方法的第二個引數,三個字串一定會首先被拼接並傳入方

法內,然後才會進行級別判斷。如果級別不符合要求,那麼字串的拼接操作就白做了,存在效能浪費。

備註:slf4j

是應用非常廣泛的日誌框架,它在記錄日誌時為了解決這種效能浪費的問題,並不推薦首先進行

字串的拼接,而是將字串的若干部分作為可變引數傳入方法中,僅在日誌級別滿足要求的情況下才會進

行字串拼接。例如:

logger.debug("

變數{}

的取值為{}。

", "os", "macos")

,其中的大括號

{} 為佔位

符。如果滿足日誌級別要求,則會將

「os」

和「macos」

兩個字串依次拼接到大括號的位置;否則不會進行字

符串拼接。這也是一種可行解決方案,但

lambda

可以做到更好。

lambda的更優寫法

使用lambda

必然需要乙個函式式介面:

@functionalinte***ce 

public inte***ce messagebuilder

然後對

log

方法進行改造:

public class demo02loggerlambda  

}public static void main(string args)

}

這樣一來,只有當級別滿足要求的時候,才會進行三個字串的拼接;否則三個字串將不會進行拼接。

證明lambda的延遲

下面的**可以通過結果進行驗證:

public class demo03loggerdelay 

}public static void main(string args) );

}}

從結果中可以看出,在不符合級別要求的情況下,

lambda

將不會執行。從而達到節省效能的效果。

擴充套件:實際上使用內部類也可以達到同樣的效果,只是將**操作延遲到了另外乙個物件當中通過呼叫方法

來完成。而是否呼叫其所在方法是在條件判斷之後才執行的。

pythonpip使用方法 pip使用方法整理

匯出專案已安裝的pip包 pip list 檢視專案中安裝的包 pip freeze requirements.txt 將專案中所用到的第三方庫輸出到requirements.txt中 pip install 版本號 pip install i 本次使用清華源進行安裝 離線安裝第三方庫 一鍵安裝整個...

使用方法 離型劑使用方法

1 使用離型劑前必須確保模具乾淨,無粉塵 蠟垢 樹脂垢 油汙等殘留物質。可以使用專用的模具潔模劑進行清洗,不可用其他液體清洗,以免清洗不乾淨或損壞模具。另外,如果您的模具是新的,在清洗乾淨後,務必要對模具進行初步處理,用離型劑在模具表面噴 刷塗5 6次,之後方可正常投入生產。2 使用離型劑時,首先要...

使用方法 卡丁車輪胎使用方法

輪胎的使用方法很重要 卡丁車輪胎是卡丁車場日常執行中的主要易損件,但是輪胎的使用方法很重要。哪些情況下會縮短輪胎的使用壽命呢?一 跑道地面粗糙 有的跑道在鋪瀝青時,或者選錯了瀝青中石子的規格,或者碾壓得不夠平整,導致路面粗糙。有的跑道使用現成的水泥地,但表面粗糙或不平整。有的室內跑道,為了提高輪胎的...