使用lambda編程之延遲執(zhí)行
使用lambda表達(dá)式的主要原因是,將代碼的執(zhí)行延遲到一個(gè)合適的時(shí)間點(diǎn)。
所有的lambda表達(dá)式都是延遲執(zhí)行的。畢竟,如果你希望立即執(zhí)行一段代碼,那就沒有必要使用lambda表達(dá)式了。延遲執(zhí)行代碼的原因有很多,例如:
在另一個(gè)線程中運(yùn)行代碼
多次運(yùn)行代碼
在某個(gè)算法的正確時(shí)間點(diǎn)上運(yùn)行代碼(例如排序中的比較操作)
當(dāng)某些情況發(fā)生時(shí)運(yùn)行代碼(按鈕點(diǎn)擊,數(shù)據(jù)到達(dá)等)
當(dāng)你使用lambda進(jìn)行編程時(shí),應(yīng)當(dāng)好好考慮一下希望達(dá)到什么樣的效果。舉個(gè)例子:假設(shè)你需要記錄一個(gè)事件的日志:
logger.info(“x:”+x+”,y:”+y);
如果日志級別設(shè)置為忽略INFO消息時(shí),該字符串會(huì)被計(jì)算并傳遞給info方法,然后再確定是否真的要執(zhí)行。為什么不能再確定需要打印時(shí),再將字符串合并起來呢?
只有再需要的時(shí)候才運(yùn)行代碼,這是使用lambda表達(dá)式的一種情況。慣用的方法式將這段代碼包裝成一個(gè)無參數(shù)的lambda表達(dá)式:()->”x:”+x+”,y:”+y。
封裝成一個(gè)方法,來執(zhí)行延遲記錄日志就是下面這樣了。
public static void info(Logger logger,Supplier<String> messge) { if(logger.isLoggable(Level.INFO)) { logger.info(messge.get()); } }
Supplier<String> 作為參數(shù),可以傳遞一個(gè)lambda表達(dá)式。
當(dāng)然也可以直接寫 logger.info(()->”x:”+x+”,y:”+y); 這樣用。
原文出自:https://www.fastmeteor.com/2017/12/20/使用lambda編程之延遲執(zhí)行
作者:紀(jì)莫
歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處。
限于本人水平,如果文章和代碼有表述不當(dāng)之處,還請不吝賜教。
歡迎掃描二維碼關(guān)注公眾號(hào):Jimoer
文章會(huì)同步到公眾號(hào)上面,大家一起成長,共同提升技術(shù)能力。
聲援博主:如果您覺得文章對您有幫助,可以點(diǎn)擊文章右下角【推薦】一下。
您的鼓勵(lì)是博主的最大動(dòng)力!


浙公網(wǎng)安備 33010602011771號(hào)