最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 中函數(shù)作為參數(shù)傳遞方法詳解

 更新時(shí)間:2025年11月29日 10:31:08   作者:Geoking.  
文章介紹了Java中函數(shù)式編程的概念,包括Lambda表達(dá)式、方法引用和函數(shù)式接口,通過(guò)這些特性,Java可以將函數(shù)作為參數(shù)傳遞,從而實(shí)現(xiàn)更靈活和簡(jiǎn)潔的代碼,文章還列舉了Java內(nèi)置的函數(shù)式接口,并展示了它們?cè)赟tream API中的應(yīng)用,感興趣的朋友跟隨小編一起看看吧

一、前言

在傳統(tǒng)的 Java 開(kāi)發(fā)中,我們習(xí)慣將數(shù)據(jù)作為參數(shù)傳遞給方法。
但從 Java 8 開(kāi)始,Java 引入了 Lambda 表達(dá)式方法引用,
讓我們能夠像在函數(shù)式語(yǔ)言中那樣,把“函數(shù)(行為)”本身作為參數(shù)進(jìn)行傳遞。

這種特性讓 Java 更加靈活、簡(jiǎn)潔,也極大地推動(dòng)了 函數(shù)式編程(Functional Programming) 在 Java 中的應(yīng)用。

二、為什么要把函數(shù)作為參數(shù)傳遞?

在面向?qū)ο缶幊讨?,我們常常?xiě)這樣的代碼:

public void process(String input) {
    System.out.println(input.toUpperCase());
}

如果你想對(duì) input 做不同的處理邏輯,比如轉(zhuǎn)小寫(xiě)、反轉(zhuǎn)、加前綴……
通常要寫(xiě)多個(gè)方法,或者在方法內(nèi)部用 if/else。

但如果我們能將“處理邏輯”作為函數(shù)傳入,就可以讓方法更通用:

public void process(String input, Function<String, String> operation) {
    System.out.println(operation.apply(input));
}

于是我們就能這樣靈活調(diào)用:

process("Java", s -> s.toUpperCase());    // 轉(zhuǎn)大寫(xiě)
process("Java", s -> s.toLowerCase());    // 轉(zhuǎn)小寫(xiě)
process("Java", s -> "Hello " + s);       // 加前綴

是不是非常優(yōu)雅?這就是“函數(shù)作為參數(shù)傳遞”的威力。

三、實(shí)現(xiàn)函數(shù)傳參的關(guān)鍵:函數(shù)式接口

在 Java 中,函數(shù)不是一等公民,不能直接像 Python 那樣傳遞函數(shù)。
但 Java 通過(guò) 函數(shù)式接口(Functional Interface) 實(shí)現(xiàn)了類(lèi)似功能。

函數(shù)式接口定義

函數(shù)式接口就是只包含一個(gè)抽象方法的接口。

例如:

@FunctionalInterface
interface MyOperation {
    void execute();
}

然后我們就可以傳入一個(gè) Lambda 表達(dá)式:

public class Demo {
    public static void main(String[] args) {
        doSomething(() -> System.out.println("Hello Lambda!"));
    }
    public static void doSomething(MyOperation op) {
        op.execute();  // 調(diào)用傳入的函數(shù)
    }
}

輸出:

Hello Lambda!

四、JDK 內(nèi)置的函數(shù)式接口

Java 在 java.util.function 包中已經(jīng)內(nèi)置了大量常用函數(shù)式接口。

接口名方法簽名功能說(shuō)明
Consumer<T>void accept(T t)接收一個(gè)參數(shù),無(wú)返回值
Supplier<T>T get()無(wú)參數(shù),有返回值
Function<T, R>R apply(T t)接收參數(shù)并返回結(jié)果
Predicate<T>boolean test(T t)接收參數(shù)并返回布爾值

Consumer 示例

import java.util.function.Consumer;
public class ConsumerDemo {
    public static void main(String[] args) {
        processData("Java", s -> System.out.println("Hello, " + s + "!"));
    }
    public static void processData(String data, Consumer<String> action) {
        action.accept(data);
    }
}

輸出:

Hello, Java!

Function 示例

import java.util.function.Function;
public class FunctionDemo {
    public static void main(String[] args) {
        transform("Lambda", s -> s.toUpperCase());
        transform("World", s -> "Hello " + s);
    }
    public static void transform(String data, Function<String, String> func) {
        String result = func.apply(data);
        System.out.println(result);
    }
}

輸出:

LAMBDA
Hello World

Predicate 示例

import java.util.function.Predicate;
public class PredicateDemo {
    public static void main(String[] args) {
        check("OpenAI", s -> s.length() > 5);
        check("GPT", s -> s.startsWith("G"));
    }
    public static void check(String data, Predicate<String> condition) {
        System.out.println(condition.test(data));
    }
}

輸出:

true
true

Supplier 示例

import java.util.function.Supplier;
public class SupplierDemo {
    public static void main(String[] args) {
        printValue(() -> "Hello from Supplier!");
    }
    public static void printValue(Supplier<String> supplier) {
        System.out.println(supplier.get());
    }
}

輸出:

Hello from Supplier!

五、結(jié)合方法引用(::)的寫(xiě)法

當(dāng)傳入的 Lambda 只是調(diào)用某個(gè)已有方法時(shí),可以用 方法引用 簡(jiǎn)化:

import java.util.List;
public class MethodRefDemo {
    public void print(String s) {
        System.out.println("Item: " + s);
    }
    public void printAll(List<String> list) {
        // 等價(jià)于 list.forEach(s -> this.print(s));
        list.forEach(this::print);
    }
    public static void main(String[] args) {
        new MethodRefDemo().printAll(List.of("Java", "Python", "C++"));
    }
}

輸出:

Item: Java
Item: Python
Item: C++

六、Stream API 中的函數(shù)傳參

函數(shù)式接口的最大用途之一,就是在 Stream API 中傳遞行為邏輯。

import java.util.List;
public class StreamExample {
    public static void main(String[] args) {
        List<String> names = List.of("Alice", "Bob", "Charlie", "David");
        names.stream()
             .filter(name -> name.length() > 3)     // 傳入 Predicate
             .map(String::toUpperCase)              // 傳入 Function
             .forEach(System.out::println);         // 傳入 Consumer
    }
}

輸出:

ALICE
CHARLIE
DAVID

這就是 Java 函數(shù)式編程的典型應(yīng)用場(chǎng)景。

七、總結(jié)

概念說(shuō)明
函數(shù)式接口只包含一個(gè)抽象方法的接口,用于支持 Lambda 表達(dá)式
Lambda 表達(dá)式讓你能像傳遞數(shù)據(jù)一樣傳遞行為
方法引用 (::)Lambda 的簡(jiǎn)寫(xiě)方式,可直接引用已有方法
常用接口Consumer、Supplier、Function、Predicate
典型應(yīng)用Stream API、回調(diào)函數(shù)、異步任務(wù)等

八、參考資料

Java-函數(shù)作為參數(shù)的傳遞與使用

Python中將函數(shù)作為參數(shù)傳遞給函數(shù)

到此這篇關(guān)于Java 中函數(shù)作為參數(shù)傳遞詳解的文章就介紹到這了,更多相關(guān)java函數(shù)作為參數(shù)傳遞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

大同市| 潮州市| 西昌市| 南通市| 西乌珠穆沁旗| 宁波市| 陵水| 虎林市| 行唐县| 沈丘县| 公主岭市| 武川县| 中牟县| 洛隆县| 青河县| 建德市| 防城港市| 称多县| 霍林郭勒市| 宝兴县| 汾阳市| 卢湾区| 双峰县| 巨野县| 平舆县| 社旗县| 慈利县| 平果县| 大余县| 福鼎市| 华宁县| 双辽市| 泾源县| 银川市| 沁阳市| 佛坪县| 桐乡市| 嘉禾县| 黎平县| 延寿县| 开封市|