第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 8 中的函數(shù)類級別參數(shù)

Java 8 中的函數(shù)類級別參數(shù)

瀟湘沐 2022-01-12 14:19:32
我想更加努力地使用 Java 8 的功能特性,并將我的思想轉(zhuǎn)向那個范式;但是,我不太確定如何調(diào)和這種情況。例如,我最近寫了類似的東西:public class ExampleClass {    private ExampleData exampleData;    private Function<ExampleData, Boolean> workFunction;    public ExampleData getExampeData() {        return exampleData;    }    public void setExampleData(ExampleData exampleData) {        this.exampleData = exampleData;    }    public Function<ExampleData, Boolean> getWorkFunction() {        return workFunction;    }    public void setWorkFunction(Function<ExampleData, Boolean> workFunction) {        this.workFunction = workFunction;    }}然后我繼續(xù)像這樣使用它......public class Worker implements Callable {    private final ExampleClass exampleClass;    // ExampleClass serves as a container for the function and it's    // input data in order to minimize the number of arguments    // passed to this constructor. Otherwise would be    // public Worker(ExampleData exampleData, Function<T, R> workFunction, ...) {    // Note: using "..." here to represent more args.    public Worker(ExampleClass exampleClass, ...) {        this.exampleClass = exampleClass;        ...    }    @Override    public void call() {        final Boolean isComplete = exampleClass.getWorkFunction().apply(exampleClass.getExampleData());        if (isComplete) {            ...        }        ...    }}與我認為更傳統(tǒng)的方法相比,上述方法是否更受歡迎?public class ExampleClass {    private ExampleData exampleData;    public ExampleClass(ExampleData exampleData) {        this.exampleData = exampleData;    }    public Boolean work() {          return isComplete(exampleData);    }}和實現(xiàn)類...public class Worker implements Callable {    private ExampleClass exampleClass;    public Worker(ExampleClass exampleClass, ...) {        this.exampleClass = exampleClass;        ...    }如果我完全偏離了基礎(chǔ),那么使用 Java 8 的適當功能解決方案是什么?更新:假設(shè)我的示例不返回布爾值。在使用 Java 8 進行函數(shù)式編程的上下文中,將函數(shù)作為類級別參數(shù)顯式傳遞更好,還是僅使用傳統(tǒng)的面向?qū)ο蠓绞絺鬟f另一個執(zhí)行該函數(shù)的類更好?
查看完整描述

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);

我不是英語的人,所以英語很差。


但我希望它對你有幫助!謝謝。


查看完整回答
反對 回復(fù) 2022-01-12
?
三國紛爭

TA貢獻1804條經(jīng)驗 獲得超7個贊

首先,接受一個參數(shù)并返回布爾值的函數(shù)應(yīng)該實現(xiàn)Java 8Predicate。

然而,在我看來,謂詞并不是要取代任何和所有的if陳述。它們旨在用作 Java 8 集合流中的過濾器。您提供的示例似乎不適合這種情況。


查看完整回答
反對 回復(fù) 2022-01-12
  • 2 回答
  • 0 關(guān)注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號