2 回答

TA貢獻1853條經(jīng)驗 獲得超9個贊
函數(shù)式編程的要點是函數(shù)必須被視為一個對象。
但是你知道,函數(shù)(方法)不是java中的對象。它與 javascript 不同。
所以,我們應(yīng)該使用名為 Predicate 的接口。
List<Apple> apples = new ArrayList<>();
你想得到重量蘋果。起初,
List<Apple> weightApples = new ArrayList<>();
for(int i = 0; 9< apples.size(); i++){
if(apples.getWeight() > 10){
weightApples.add(apples.get(i));
}
}
這段代碼。
在函數(shù)式編程中,函數(shù)是“純函數(shù)”。
在純函數(shù)中,應(yīng)避免在函數(shù)中使用外部變量。
而且,我們不關(guān)心“使用函數(shù)的行”中的函數(shù)邏輯
首先,我們需要謂詞接口。
interface Predicate<T>{
public boolean pass(T t);
}
通過泛型,我們可以擴展對象類型。
我們可以制作過濾器。
public static <T> List<T> filter(List<T> list, Predicate<T> predicate){
List<T> result = new ArrayList<>();
for(T el : list){
if(predicate.pass(el)){
result.add(el);
}
}
return result;
}
pass() 尚未實現(xiàn)。
它可以由匿名類實現(xiàn)。
最后,使用 lamda 將方法視為對象!
filter(apples, (Apple apple) -> apple.getWeight()>10);
我不是英語的人,所以英語很差。
但我希望它對你有幫助!謝謝。

TA貢獻1804條經(jīng)驗 獲得超7個贊
首先,接受一個參數(shù)并返回布爾值的函數(shù)應(yīng)該實現(xiàn)Java 8Predicate
。
然而,在我看來,謂詞并不是要取代任何和所有的if
陳述。它們旨在用作 Java 8 集合流中的過濾器。您提供的示例似乎不適合這種情況。
添加回答
舉報