真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java8中怎么實(shí)現(xiàn)函數(shù)入?yún)?/h1>

今天就跟大家聊聊有關(guān)Java8中怎么實(shí)現(xiàn)函數(shù)入?yún)?,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的鄧州網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1. 前情回顧

Java8支持將函數(shù)作為參數(shù)傳遞到另一個函數(shù)內(nèi)部,在第一篇學(xué)習(xí)筆記中也簡單提到了這個用法。但是在第一篇學(xué)習(xí)的時候,還是困惑的,先說下我的困惑。

在第一篇中提到函數(shù)入?yún)ⅲ雲(yún)⒌念愋鸵榷x一個接口:

public interface Predicate {
    boolean test(T t);
}

然后定義一個函數(shù)如下:

public static List filterApples(List inventory,Predicate predicate){
    List result = new ArrayList<>();

    for(Apple apple:inventory){
        if(predicate.test(apple)){
            result.add(apple);
        }
    }
    return result;
}

最后調(diào)用該方法:

List filterGreenApples= filterApples(originApples,Apple::isGreenApple);

這里問題就來了,入?yún)㈩愋褪且粋€接口Predicate,那實(shí)際入?yún)⒉粦?yīng)該是這個接口的實(shí)現(xiàn)類的對象嗎,為什么直接就傳了這個靜態(tài)方法呢?

帶著這個問題,開始再繼續(xù)學(xué)習(xí)一下函數(shù)入?yún)⑦@塊內(nèi)容。

2. 繼續(xù)學(xué)習(xí)

要理清函數(shù)作為參數(shù)傳遞這塊內(nèi)容,還得先從最簡單的實(shí)現(xiàn)看起。在學(xué)習(xí)設(shè)計模式的時候,有了解過策略模式。第一個文章蘋果那個demo為例,加上策略模式。

首先定義一個接口,后面實(shí)現(xiàn)的所有策略都基于該接口:

public interface ApplePredicate {
    boolean test(T t);
}

接著實(shí)現(xiàn)兩個篩選蘋果的策略:一個是根據(jù)顏色進(jìn)行篩選,另一個是根據(jù)重量進(jìn)行篩選:

public class filterAppleByColorPredicate implements Predicate {
    @Override
    public boolean test(Apple apple) {
        return "green".equals(apple.getColor());
    }
}

public class filterAppleByWeightPredicate implements Predicate {
    @Override
    public boolean test(Apple apple) {
        return apple.getWeight() > 15;
    }
}

最后main方法實(shí)現(xiàn)如下:

public static void main(String[] args){
		List inventory = ...;
    
    // 選擇根據(jù)顏色過濾的策略過濾
    ApplePredicate colorPredicate = new filterAppleByColorPredicate();
    filterApples(inventory,colorPredicate);
    
    // 選擇根據(jù)重量過濾的策略過濾
    ApplePredicate weightPredicate = new filterAppleByWeightPredicate();
    filterApples(inventory,weightPredicate);
    
}

public static List filterApples(List inventory,ApplePredicate predicate){
    List result = new ArrayList<>();

    for(Apple apple:inventory){
        if(predicate.test(apple)){
            result.add(apple);
        }
    }
    return result;
}

這樣就實(shí)現(xiàn)了一個基于策略模式的代碼。

3. 匿名類

在第二小節(jié)的基礎(chǔ)上,直接使用匿名類,省去了各種策略的實(shí)現(xiàn)類的定義:

filterApples(inventory,new ApplePredicate() {
	public boolean test(Apple apple){
		return "green".equals(apple.getColor());
	}
});

4. Lambda表達(dá)式

第三小節(jié)使用匿名類,但是當(dāng)代碼量多了以后,還是顯得累贅,為此引入Lambda表達(dá)式來簡化編寫:

filterApples(inventory,(Apple apple) -> "green".equals(apple.getColor()));

關(guān)于Lambda這里我還是有疑問的,假如接口定義了兩個方法:

public interface ApplePredicate {
    boolean test(T t);
    boolean test2(T t);
}

看完上述內(nèi)容,你們對Java8中怎么實(shí)現(xiàn)函數(shù)入?yún)⒂羞M(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


文章標(biāo)題:Java8中怎么實(shí)現(xiàn)函數(shù)入?yún)?
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/pjohsp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部