国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java 8 - 通過lambda表達式進行惰性計算

2019-11-06 06:18:25
字體:
來源:轉載
供稿:網友

lambda表達式的出現使得JDK8內部發生了很多有趣的變化, 其中就包括惰性計算的特性.

這里以JDK標準庫中的Logger為例, 1.8以前的log方法有如下簽名:

public void log(Level level, String msg) { if (!isLoggable(level)) { return; } LogRecord lr = new LogRecord(level, msg); doLog(lr); }

也就是說客戶端程序調用log方法的時候, 無論最終是否觸發log行為, msg始終是要被計算的. 若計算msg是非常耗時的行為, 那么無疑會造成不必要的開銷. 下面是一個調用的例子:

log(Level.WARNING, "Log msg: " + someExpensiveOperation());

java 1.8版本出現之后, 該方法多了如下重載:

public void log(Level level, Supplier<String> msgSupplier) { if (!isLoggable(level)) { return; } LogRecord lr = new LogRecord(level, msgSupplier.get()); doLog(lr); }

Supplier是一個FunctionalInterface, 也就是說現在的log方法可以接受一個無參的lambda表達式作為參數, 而計算的過程也被延遲到了supplier.get()的調用時. 改進后的調用例子:

// 注意: 傳入的lambda表達式并不會立即執行, 而是在log中判斷isLoggable(level)成功后才會執行log(Level.WARNING, () -> "Log msg: " + someExpensiveOperation());
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴安盟| 卢龙县| 商都县| 镇宁| 特克斯县| 百色市| 平武县| 黎城县| 建平县| 册亨县| 武强县| 化德县| 江北区| 罗城| 渝北区| 南皮县| 徐州市| 澳门| 扎兰屯市| 蓬莱市| 阳曲县| 无为县| 县级市| 方山县| 镇宁| 玛纳斯县| 彰武县| 卓资县| 泾川县| 松原市| 葫芦岛市| 晋州市| 屯昌县| 库尔勒市| 西峡县| 临安市| 腾冲县| 台南县| 兴和县| 延川县| 中宁县|