在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java/ Java8 中的引入的Supplier,Predicate主要應(yīng)用在哪里?

Java8 中的引入的Supplier,Predicate主要應(yīng)用在哪里?

Java8 中的引入的Supplier,Predicate主要應(yīng)用在哪里?能否舉個(gè)實(shí)際應(yīng)用的例子來(lái)說(shuō)明一下,謝謝

回答
編輯回答
胭脂淚

主要用在函數(shù)式編程里面,也可用于其他任何合適的地方,目的是將函數(shù)(lambda)作為變量來(lái)傳遞。

至于例子,網(wǎng)上一搜一大把。

2018年4月13日 17:09
編輯回答
蟲(chóng)児飛

舉一個(gè)java8實(shí)戰(zhàn)中的例子吧
java8引入了一個(gè)對(duì)log方法的重載版本,這個(gè)版本的log方法接受一個(gè)Supplier作為參數(shù)。這個(gè)替代版本的log方法的函數(shù)簽名如下:

public void log(Level level, Supplier<String> msgSupplier)

你可以通過(guò)下面的方式對(duì)它進(jìn)行調(diào)用:

logger.log(Level.FINER, () -> "Problem: " + generateDiagnostic());

如果日志器的級(jí)別設(shè)置恰當(dāng), log 方法會(huì)在內(nèi)部執(zhí)行作為參數(shù)傳遞進(jìn)來(lái)的Lambda表達(dá)式。這
里介紹的 Log 方法的內(nèi)部實(shí)現(xiàn)如下:

public void log(Level level, Supplier<String> msgSupplier){
    if(logger.isLoggable(level)){
        log(level, msgSupplier.get());
    }
}

如果你發(fā)現(xiàn)你需要頻繁地從客戶(hù)端代碼去查詢(xún)一個(gè)對(duì)象的狀態(tài)(比如前文例子中的日志器的狀態(tài)),只是為了傳遞參數(shù)、調(diào)用該對(duì)象的一個(gè)方法(比如輸出一條日志),那么可以考慮實(shí)現(xiàn)一個(gè)新的方法,以Lambda或者方法表達(dá)式作為參數(shù),新方法在檢查完該對(duì)象的狀態(tài)之后才調(diào)用原來(lái)的方法.你的代碼會(huì)因此而變得更易讀(結(jié)構(gòu)更清晰),封裝性更好(對(duì)象的狀態(tài)也不會(huì)暴露給客戶(hù)端代碼了).

2017年4月8日 04:08