2 回答

TA貢獻1853條經驗 獲得超9個贊
函數式編程的要點是函數必須被視為一個對象。
但是你知道,函數(方法)不是java中的對象。它與 javascript 不同。
所以,我們應該使用名為 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));
}
}
這段代碼。
在函數式編程中,函數是“純函數”。
在純函數中,應避免在函數中使用外部變量。
而且,我們不關心“使用函數的行”中的函數邏輯
首先,我們需要謂詞接口。
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() 尚未實現。
它可以由匿名類實現。
最后,使用 lamda 將方法視為對象!
filter(apples, (Apple apple) -> apple.getWeight()>10);
我不是英語的人,所以英語很差。
但我希望它對你有幫助!謝謝。

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