亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java8中怎么實現函數入參

發布時間:2021-07-14 13:52:17 來源:億速云 閱讀:606 作者:Leah 欄目:大數據

今天就跟大家聊聊有關Java8中怎么實現函數入參,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1. 前情回顧

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

在第一篇中提到函數入參,入參的類型要先定義一個接口:

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

然后定義一個函數如下:

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

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

最后調用該方法:

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

這里問題就來了,入參類型是一個接口Predicate,那實際入參不應該是這個接口的實現類的對象嗎,為什么直接就傳了這個靜態方法呢?

帶著這個問題,開始再繼續學習一下函數入參這塊內容。

2. 繼續學習

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

首先定義一個接口,后面實現的所有策略都基于該接口:

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

接著實現兩個篩選蘋果的策略:一個是根據顏色進行篩選,另一個是根據重量進行篩選:

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

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

最后main方法實現如下:

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

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

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

這樣就實現了一個基于策略模式的代碼。

3. 匿名類

在第二小節的基礎上,直接使用匿名類,省去了各種策略的實現類的定義:

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

4. Lambda表達式

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

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

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

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

看完上述內容,你們對Java8中怎么實現函數入參有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄城县| 龙游县| 嘉黎县| 柳河县| 讷河市| 本溪| 自治县| 望奎县| 宣城市| 长子县| 桃源县| 固阳县| 安仁县| 广宗县| 遂川县| 三原县| 阜阳市| 合江县| 延吉市| 玛纳斯县| 抚宁县| 根河市| 洛川县| 大荔县| 锡林郭勒盟| 竹山县| 斗六市| 苍梧县| 穆棱市| 古蔺县| 凤山县| 昭平县| 满洲里市| 洪泽县| 天津市| 黄大仙区| 泽普县| 永州市| 邵武市| 静宁县| 奉化市|