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