日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Java中的函數(shù)接口,你都用過(guò)了嗎

在這篇文章中,我們將通過(guò)示例來(lái)學(xué)習(xí) Java 函數(shù)式接口。

成都創(chuàng)新互聯(lián)公司是一家以重慶網(wǎng)站建設(shè)公司、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、seo優(yōu)化排名、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為橡塑保溫等眾行業(yè)中小客戶(hù)提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。

一、函數(shù)式接口的特點(diǎn)

  • 只包含一個(gè)抽象方法的接口稱(chēng)為函數(shù)式接口。
  • 它可以有任意數(shù)量的默認(rèn)靜態(tài)方法,但只能包含一個(gè)抽象方法。它還可以聲明對(duì)象類(lèi)的方法。
  • 函數(shù)接口也稱(chēng)為單一抽象方法接口或SAM 接口。
  • 函數(shù)式接口只有在沒(méi)有任何抽象方法時(shí)才可以擴(kuò)展另一個(gè)接口。
  • Java API 具有許多單方法接口,例如 Runnable、Callable、Comparator、ActionListener等。它們可以使用匿名類(lèi)語(yǔ)法來(lái)實(shí)現(xiàn)和實(shí)例化。

二、接口示例

創(chuàng)建一個(gè)自定義的Sayable接口,這是一個(gè)使用@FunctionalInterface注解的函數(shù)式接口。@FunctionalInterface注解表示該接口是一個(gè)函數(shù)式接口,并且只包含一個(gè)抽象方法。

1.自定義函數(shù)接口示例:

@FunctionalInterface  
interface Sayable{  
    void say(String msg);   // abstract method   
}  

讓我們通過(guò)main()方法來(lái)演示一個(gè)自定義的函數(shù)式接口。我們使用Lambda表達(dá)式來(lái)實(shí)現(xiàn)函數(shù)式接口。

public class FunctionalInterfacesExample {

    public static void main(String[] args) {

        Sayable sayable = (msg) -> {
            System.out.println(msg);
        };
        sayable.say("Say something ..");
    }
}

2.Predefined 函數(shù)接口

Java提供了Predefined的函數(shù)式接口,通過(guò)使用 lambda 和方法引用來(lái)處理函數(shù)式編程。

Predicate是檢查條件的函數(shù),它接受一個(gè)參數(shù)并返回boolean結(jié)果。

讓我們來(lái)看一下Predicate接口的內(nèi)部實(shí)現(xiàn)。

import java.util.function.Predicate;

public interface Predicate {
    boolean test(T t);

    default Predicate and(Predicate other) {
        // 默認(rèn)方法的實(shí)現(xiàn)
        return (t) -> test(t) && other.test(t);
    }

    // 其他默認(rèn)方法和靜態(tài)方法...
}

Predicate接口只包含一個(gè)抽象方法test(T t)同時(shí)它還包含默認(rèn)方法和靜態(tài)方法。

讓我們創(chuàng)建一個(gè)示例來(lái)演示Predicate函數(shù)式接口的用法:

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

public class Main {
    public static void main(String[] args) {
        List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // 使用Predicate接口檢查數(shù)字是否為偶數(shù)
        Predicate evenNumberPredicate = number -> number % 2 == 0;
        System.out.println("Even numbers:");
        printNumbers(numbers, evenNumberPredicate);

        // 使用Predicate接口檢查數(shù)字是否大于5
        Predicate greaterThanFivePredicate = number -> number > 5;
        System.out.println("Numbers greater than 5:");
        printNumbers(numbers, greaterThanFivePredicate);
    }

    public static void printNumbers(List numbers, Predicate predicate) {
        for (Integer number : numbers) {
            if (predicate.test(number)) {
                System.out.println(number);
            }
        }
    }
}

3.Function 函數(shù)接口

Function函數(shù)接口是Java中的一個(gè)函數(shù)式接口,它定義了一個(gè)接收一個(gè)參數(shù)并返回結(jié)果的函數(shù)。它的定義如下:

@FunctionalInterface
public interface Function {
    R apply(T t);
}

Function接口有兩個(gè)泛型參數(shù):T表示輸入?yún)?shù)的類(lèi)型,R表示返回結(jié)果的類(lèi)型。它包含一個(gè)抽象方法apply(),接收一個(gè)類(lèi)型為T(mén)的參數(shù),并返回一個(gè)類(lèi)型為R的結(jié)果。

Function接口常用于將一個(gè)值轉(zhuǎn)換為另一個(gè)值,或者對(duì)輸入值進(jìn)行處理和計(jì)算。它可以被用于各種場(chǎng)景,如數(shù)據(jù)轉(zhuǎn)換、映射、計(jì)算和處理等。

以下是一個(gè)使用Function函數(shù)接口的示例:

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        // 創(chuàng)建一個(gè)Function接口來(lái)將字符串轉(zhuǎn)換為大寫(xiě)
        Function uppercaseFunction = str -> str.toUpperCase();

        // 使用Function接口將字符串轉(zhuǎn)換為大寫(xiě)
        String result = uppercaseFunction.apply("hello world");
        System.out.println(result);  // 輸出: HELLO WORLD

        // 使用Function接口將字符串轉(zhuǎn)換為其長(zhǎng)度
        Function lengthFunction = str -> str.length();
        int length = lengthFunction.apply("hello");
        System.out.println(length);  // 輸出: 5
    }
}

4.Supplier 函數(shù)接口

Supplier用于表示一個(gè)提供(供應(yīng))結(jié)果的函數(shù)。它通常用于延遲計(jì)算或在需要時(shí)生成值。通過(guò)調(diào)用get()方法,我們可以獲取由Supplier實(shí)例提供的結(jié)果。

以下是Consumer接口的實(shí)現(xiàn)

@FunctionalInterface
public interface Supplier {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

由于Supplier接口只有一個(gè)抽象方法,因此可以使用lambda表達(dá)式快速創(chuàng)建Supplier實(shí)例。下面是一個(gè)示例:

import java.util.Random;
import java.util.function.Supplier;

public class Main {
    public static void main(String[] args) {
        // 創(chuàng)建一個(gè)Supplier接口來(lái)生成隨機(jī)整數(shù)
        Supplier randomIntegerSupplier = () -> new Random().nextInt();

        // 使用Supplier接口生成隨機(jī)整數(shù)
        int randomNumber = randomIntegerSupplier.get();
        System.out.println(randomNumber);

        // 創(chuàng)建一個(gè)Supplier接口來(lái)生成當(dāng)前時(shí)間戳
        Supplier timestampSupplier = () -> System.currentTimeMillis();

        // 使用Supplier接口生成當(dāng)前時(shí)間戳
        long timestamp = timestampSupplier.get();
        System.out.println(timestamp);
    }
}

5.Consumer 函數(shù)接口

Consumer用于表示接受一個(gè)參數(shù)并執(zhí)行某些操作的函數(shù)。它定義了一個(gè)名為accept(T t)的抽象方法,接受一個(gè)參數(shù),并且沒(méi)有返回值。

以下是Consumer接口的簡(jiǎn)化版本:

@FunctionalInterface
public interface Consumer {
    void accept(T arg0);
}

Consumer接口適用于那些需要對(duì)傳入的參數(shù)進(jìn)行某種操作,而不需要返回結(jié)果的情況。它可以用于在不同的上下文中執(zhí)行各種操作,如打印、修改狀態(tài)、更新對(duì)象等。下面是一個(gè)使用Consumer接口的示例:

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        List names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");

        // 使用Consumer接口打印每個(gè)名字
        Consumer printName = name -> System.out.println(name);
        names.forEach(printName);

        // 使用Consumer接口修改每個(gè)名字為大寫(xiě)形式
        Consumer uppercaseName = name -> {
            String uppercase = name.toUpperCase();
            System.out.println(uppercase);
        };
        names.forEach(uppercaseName);
    }
}

在上述示例中,我們創(chuàng)建了兩個(gè)Consumer接口的實(shí)例。第一個(gè)printName用于打印每個(gè)名字,第二個(gè)uppercaseName用于將每個(gè)名字轉(zhuǎn)換為大寫(xiě)形式并打印。

通過(guò)調(diào)用forEach()方法并傳入相應(yīng)的Consumer接口實(shí)例,我們可以對(duì)列表中的每個(gè)元素執(zhí)行相應(yīng)的操作。在示例中,我們對(duì)名字列表中的每個(gè)名字進(jìn)行了打印和轉(zhuǎn)換操作。

Consumer接口的使用場(chǎng)景包括遍歷集合、處理回調(diào)函數(shù)、更新對(duì)象狀態(tài)等。它提供了一種簡(jiǎn)潔的方式來(lái)執(zhí)行針對(duì)輸入?yún)?shù)的操作,使得代碼更加清晰和模塊化。

6.BiFunction 函數(shù)接口

BiFunction函數(shù)式接口表示接受兩個(gè)參數(shù)并返回結(jié)果的函數(shù)。它定義了一個(gè)名為apply(T t, U u)的抽象方法,接受兩個(gè)參數(shù),并返回一個(gè)結(jié)果。

讓我們來(lái)看一下BiFunction接口的簡(jiǎn)化版本。

@FunctionalInterface
public interface BiFunction {
    R apply(T arg0, U arg1);
}

BiFunction接口適用于那些需要接受兩個(gè)輸入?yún)?shù)并產(chǎn)生結(jié)果的情況。它可以用于執(zhí)行各種操作,如計(jì)算、轉(zhuǎn)換、篩選等。下面是一個(gè)使用BiFunction接口的示例:

import java.util.function.BiFunction;

public class Main {
    public static void main(String[] args) {
        // 使用BiFunction接口計(jì)算兩個(gè)數(shù)的和
        BiFunction sumFunction = (a, b) -> a + b;
        int sum = sumFunction.apply(5, 3);
        System.out.println(sum);  // 輸出: 8

        // 使用BiFunction接口將兩個(gè)字符串拼接起來(lái)
        BiFunction concatenateFunction = (str1, str2) -> str1 + str2;
        String result = concatenateFunction.apply("Hello, ", "World!");
        System.out.println(result);  // 輸出: Hello, World!
    }
}

7.BiConsumer函數(shù)接口

BiConsumer接口,用于表示接受兩個(gè)參數(shù)并執(zhí)行某些操作的函數(shù)。它定義了一個(gè)名為accept(T t, U u)的抽象方法,接受兩個(gè)參數(shù),并且沒(méi)有返回值。

以下是BiConsumer接口的簡(jiǎn)化版本:

import java.util.function.BiConsumer;

@FunctionalInterface
public interface BiConsumer {
    void accept(T t, U u);
}

BiConsumer接口適用于那些需要對(duì)傳入的兩個(gè)參數(shù)進(jìn)行某種操作,而不需要返回結(jié)果的情況。它可以用于在不同的上下文中執(zhí)行各種操作,如打印、修改狀態(tài)、更新對(duì)象等。下面是一個(gè)使用BiConsumer接口的示例:

import java.util.function.BiConsumer;

public class Main {
    public static void main(String[] args) {
        // 使用BiConsumer接口打印兩個(gè)數(shù)的和
        BiConsumer sumPrinter = (a, b) -> System.out.println(a + b);
        sumPrinter.accept(5, 3);

        // 使用BiConsumer接口打印兩個(gè)字符串的拼接結(jié)果
        BiConsumer concatenationPrinter = (str1, str2) -> System.out.println(str1 + str2);
        concatenationPrinter.accept("Hello, ", "World!");
    }
}

8.BiPredicate 函數(shù)接口

BiPredicate接口用于表示接受兩個(gè)參數(shù)并返回一個(gè)布爾值的函數(shù)。它定義了一個(gè)名為test(T t, U u)的抽象方法,接受兩個(gè)參數(shù),并返回一個(gè)布爾值。

以下是BiPredicate接口的簡(jiǎn)化版本:

@FunctionalInterface 
public interface BiPredicate {
     boolean test(T t, U u);
     // Default methods are defined also
}

BiPredicate接口適用于那些需要對(duì)傳入的兩個(gè)參數(shù)進(jìn)行某種條件判斷,并返回布爾值的情況。它可以用于執(zhí)行各種條件判斷,如相等性比較、大小比較、復(fù)雜條件判斷等。

下面是一個(gè)使用BiPredicate接口的示例:

import java.util.function.BiPredicate;

public class Main {
    public static void main(String[] args) {
        // 使用BiPredicate接口判斷兩個(gè)數(shù)是否相等
        BiPredicate equalityPredicate = (a, b) -> a.equals(b);
        boolean isEqual = equalityPredicate.test(5, 5);
        System.out.println(isEqual);  // 輸出: true

        // 使用BiPredicate接口判斷一個(gè)字符串是否包含另一個(gè)字符串
        BiPredicate containsPredicate = (str1, str2) -> str1.contains(str2);
        boolean isContains = containsPredicate.test("Hello, World!", "World");
        System.out.println(isContains);  // 輸出: true
    }
}

名稱(chēng)欄目:Java中的函數(shù)接口,你都用過(guò)了嗎
路徑分享:http://www.dlmjj.cn/article/dpggggc.html