国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Java中的函數接口,你都用過了嗎

開發 前端
只包含一個抽象方法的接口稱為函數式接口,在這篇文章中,我們將通過示例來學習 Java 函數式接口。

在這篇文章中,我們將通過示例來學習 Java 函數式接口。

一、函數式接口的特點

  • 只包含一個抽象方法的接口稱為函數式接口。
  • 它可以有任意數量的默認靜態方法,但只能包含一個抽象方法。它還可以聲明對象類的方法。
  • 函數接口也稱為單一抽象方法接口或SAM 接口。
  • 函數式接口只有在沒有任何抽象方法時才可以擴展另一個接口。
  • Java API 具有許多單方法接口,例如 Runnable、Callable、Comparator、ActionListener等。它們可以使用匿名類語法來實現和實例化。

二、接口示例

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

1.自定義函數接口示例:

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

讓我們通過main()方法來演示一個自定義的函數式接口。我們使用Lambda表達式來實現函數式接口。

public class FunctionalInterfacesExample {

    public static void main(String[] args) {

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

2.Predefined 函數接口

Java提供了Predefined的函數式接口,通過使用 lambda 和方法引用來處理函數式編程。

Predicate是檢查條件的函數,它接受一個參數并返回boolean結果。

讓我們來看一下Predicate接口的內部實現。

import java.util.function.Predicate;

public interface Predicate<T> {
    boolean test(T t);

    default Predicate<T> and(Predicate<? super T> other) {
        // 默認方法的實現
        return (t) -> test(t) && other.test(t);
    }

    // 其他默認方法和靜態方法...
}

Predicate接口只包含一個抽象方法test(T t)同時它還包含默認方法和靜態方法。

讓我們創建一個示例來演示Predicate函數式接口的用法:

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

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

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

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

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

3.Function 函數接口

Function函數接口是Java中的一個函數式接口,它定義了一個接收一個參數并返回結果的函數。它的定義如下:

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

Function接口有兩個泛型參數:T表示輸入參數的類型,R表示返回結果的類型。它包含一個抽象方法apply(),接收一個類型為T的參數,并返回一個類型為R的結果。

Function接口常用于將一個值轉換為另一個值,或者對輸入值進行處理和計算。它可以被用于各種場景,如數據轉換、映射、計算和處理等。

以下是一個使用Function函數接口的示例:

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        // 創建一個Function接口來將字符串轉換為大寫
        Function<String, String> uppercaseFunction = str -> str.toUpperCase();

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

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

4.Supplier 函數接口

Supplier用于表示一個提供(供應)結果的函數。它通常用于延遲計算或在需要時生成值。通過調用get()方法,我們可以獲取由Supplier實例提供的結果。

以下是Consumer接口的實現

@FunctionalInterface
public interface Supplier<T> {

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

由于Supplier接口只有一個抽象方法,因此可以使用lambda表達式快速創建Supplier實例。下面是一個示例:

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

public class Main {
    public static void main(String[] args) {
        // 創建一個Supplier接口來生成隨機整數
        Supplier<Integer> randomIntegerSupplier = () -> new Random().nextInt();

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

        // 創建一個Supplier接口來生成當前時間戳
        Supplier<Long> timestampSupplier = () -> System.currentTimeMillis();

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

5.Consumer 函數接口

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

以下是Consumer接口的簡化版本:

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

Consumer接口適用于那些需要對傳入的參數進行某種操作,而不需要返回結果的情況。它可以用于在不同的上下文中執行各種操作,如打印、修改狀態、更新對象等。下面是一個使用Consumer接口的示例:

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

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

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

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

在上述示例中,我們創建了兩個Consumer接口的實例。第一個printName用于打印每個名字,第二個uppercaseName用于將每個名字轉換為大寫形式并打印。

通過調用forEach()方法并傳入相應的Consumer接口實例,我們可以對列表中的每個元素執行相應的操作。在示例中,我們對名字列表中的每個名字進行了打印和轉換操作。

Consumer接口的使用場景包括遍歷集合、處理回調函數、更新對象狀態等。它提供了一種簡潔的方式來執行針對輸入參數的操作,使得代碼更加清晰和模塊化。

6.BiFunction 函數接口

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

讓我們來看一下BiFunction接口的簡化版本。

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

BiFunction接口適用于那些需要接受兩個輸入參數并產生結果的情況。它可以用于執行各種操作,如計算、轉換、篩選等。下面是一個使用BiFunction接口的示例:

import java.util.function.BiFunction;

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

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

7.BiConsumer函數接口

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

以下是BiConsumer接口的簡化版本:

import java.util.function.BiConsumer;

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

BiConsumer接口適用于那些需要對傳入的兩個參數進行某種操作,而不需要返回結果的情況。它可以用于在不同的上下文中執行各種操作,如打印、修改狀態、更新對象等。下面是一個使用BiConsumer接口的示例:

import java.util.function.BiConsumer;

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

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

8.BiPredicate 函數接口

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

以下是BiPredicate接口的簡化版本:

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

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

下面是一個使用BiPredicate接口的示例:

import java.util.function.BiPredicate;

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

        // 使用BiPredicate接口判斷一個字符串是否包含另一個字符串
        BiPredicate<String, String> containsPredicate = (str1, str2) -> str1.contains(str2);
        boolean isContains = containsPredicate.test("Hello, World!", "World");
        System.out.println(isContains);  // 輸出: true
    }
}
責任編輯:趙寧寧 來源: 架構成長指南
相關推薦

2020-08-23 09:18:30

Pandas函數數據分析

2021-02-22 09:10:10

數字人民幣DCEP區塊鏈

2010-11-26 09:45:56

2020-08-16 10:58:20

Pandaspython開發

2022-05-27 09:02:31

Openbase開源前端

2009-07-20 10:18:49

PHP 5.3命名空間

2010-07-09 09:01:55

2020-12-02 14:50:50

Windows 10Windows微軟

2023-11-22 07:42:01

2023-01-28 10:27:04

2021-11-30 08:44:29

SpringRouter Func函數式接口

2022-05-18 08:00:26

函數劫持JavaScript鉤子函數

2020-11-30 05:51:52

Windows10

2019-01-10 16:52:26

華為

2023-09-09 12:23:24

函數式接口程序

2023-11-06 07:37:01

函數式插槽React

2024-11-08 09:37:10

C#組件

2023-10-10 08:33:40

編程范式命令式編程

2021-11-16 11:32:55

開發跳躍游戲

2020-06-03 16:50:09

Node.js框架開發
點贊
收藏

51CTO技術棧公眾號

免费欧美一区| 美女精品久久| 国产色产综合色产在线视频| 国产在线观看一区二区三区| 欧美xx视频| 亚洲级视频在线观看免费1级| 男人的天堂在线视频| 黄污网站在线观看| 国产精品一区在线| 亚洲免费视频一区| 久久一区二区三区超碰国产精品| 亚洲iv一区二区三区| 激情婷婷综合网| hitomi一区二区三区精品| 精品国产无码在线| 精品在线播放免费| 手机在线视频你懂的| 麻豆精品在线播放| 色一情一区二区三区四区 | 午夜精品影视国产一区在线麻豆| 最近2019中文字幕第三页视频 | 97久久亚洲| 久久久久国产精品免费网站| 精品一区视频| 68精品久久久久久欧美| 亚洲桃色综合影院| 国产色视频一区| 欧美网站在线| 国精产品一区二区| 日本成人在线电影网| 日韩精品免费一区| 99r精品视频| 99不卡视频| 色屁屁一区二区| 菠萝菠萝蜜在线视频免费观看 | 噜噜噜噜噜在线视频| 色欧美88888久久久久久影院| 人成在线免费视频| 日韩亚洲欧美成人一区| 中国色在线日|韩| 久久精品最新地址| 亚洲精品国产动漫| 91日韩久久| 奇米色一区二区| 无码aⅴ精品一区二区三区浪潮| 国产精品天干天干在线综合| 啦啦啦啦免费高清视频在线观看1| 色94色欧美sute亚洲线路一久| 国产黄色小视频在线| 国产亚洲人成a一在线v站| www.国产精品一区| 国产精品久久久久久久免费大片 | 婷婷国产在线综合| 992tv免费直播在线观看| 精品欧美久久久| 日韩精品成人| 亚洲xxxxx性| 国产盗摄一区二区三区| 成人综合视频在线| 欧美日韩在线视频观看| 国产99在线观看| 91精品国产高清久久久久久久久| 国产精品草草| 欧美一级视频在线播放| 亚洲国产三级在线| 国产美女高潮在线观看| 2019亚洲男人天堂| 免费在线观看不卡| 永久免费的av网站| 日韩免费电影一区| 韩国精品福利一区二区三区| 久久综合九色99| 亚洲欧洲日本在线| 91av久久| 成人激情综合网| 成人午夜av电影| 欧美日韩激情视频一区二区三区| 亚洲午夜精品久久久久久久久久久久 | 国产美女在线观看一区| 91福利电影| 日韩av在线播放资源| 成人影院在线| 日韩xxxx视频| 欧美精品三级日韩久久| 黄色成人美女网站| 一区二区冒白浆视频| 狠狠色香婷婷久久亚洲精品| 日本午夜免费一区二区| 久久人人97超碰人人澡爱香蕉| 国产精品欧美久久久久无广告 | 亚洲老女人av| 亚洲国产精品va在线看黑人| 欧美中文一区二区| 日韩欧美精品在线观看视频| 欧美一三区三区四区免费在线看| 黑人久久a级毛片免费观看| 香蕉久久夜色| 色视频一区二区| 免费久久久久久久久| 国产在线青青草| 日韩国产在线播放| 中文高清一区| 中文字幕在线网| 78色国产精品| 久久久综合视频| 国产精品亚洲一区二区三区在线观看| 精品一区二区三区国产| 精品久久久久久国产| 婷婷激情久久| 国模无码视频一区二区三区| 日韩亚洲欧美在线| 在线日韩欧美| 色哟哟在线观看| 国产精品男人爽免费视频1| 国产精品色在线| 波多野结衣在线一区二区 | 欧美大片免费观看在线观看网站推荐 | 精品夜夜嗨av一区二区三区| 伊人222成人综合网| www日韩av| 天天影视网天天综合色在线播放| 久久精品一级| 无码av天堂一区二区三区| 亚洲欧美日韩在线高清直播| 久久精品av麻豆的观看方式| 9999精品成人免费毛片在线看| 亚洲日本无吗高清不卡| 日韩欧美一级特黄在线播放| 日韩黄色小视频| h片精品在线观看| 日韩亚洲欧美一区二区| 国产亚洲精品高潮| www.亚洲国产| 伊色综合久久之综合久久| 自拍偷拍21p| 国产精品极品尤物在线观看| 亚洲成人免费视| 激情偷拍久久| 超级白嫩亚洲国产第一| 免费不卡av在线| 久久99久久久久久久噜噜| 亚洲日本欧美天堂| 国产精品国产三级国产在线观看| 成人18在线| 午夜在线视频免费观看| 日韩在线视频观看| 中文字幕在线一区二区三区| 欧美电影《睫毛膏》| 亚洲s色大片| 黄黄视频在线观看| 欧美成人小视频| 亚洲午夜影视影院在线观看| 欧美精品三区| 欧美黑人国产人伦爽爽爽| 国产精品狼人久久影院观看方式| av在线不卡免费观看| 国产有码在线| 成人手机视频在线| 精品国产自在精品国产浪潮| 日韩码欧中文字| 欧美福利在线| 综合日韩av| 97视频免费| 精品一区二区视频| 在线观看日韩av| 亚洲精品中文在线影院| 亚洲精品黄色| 日本一区二区三区中文字幕 | caoporn视频在线观看| 男女视频一区二区三区| 国产日本欧美一区二区三区在线| 在线不卡免费av| 久久综合色婷婷| 欧美成人嫩草网站| 成人看片网页| 濑亚美莉一二区在线视频| 亚洲图片都市激情| 91国产精品电影| 日韩一区二区在线看| 久久精品无码一区二区三区| 99精品综合| 亚洲综合av一区二区三区| 国产精品美女视频网站| av动漫免费观看| jizz欧美性11| 国产裸体写真av一区二区| 成人性生交大合| 亚洲第一福利专区| 国产理论在线观看| 欧美日韩亚洲自拍| 亚洲xxx拳头交| 奇米色777欧美一区二区| 国产日韩欧美综合一区| 久久天天躁狠狠躁夜夜躁2014 | 精品日韩一区二区| 日本一区二区在线不卡| 亚洲一区二区三区高清| 91精品网站| 美女黄a一级视频| 99re热久久这里只有精品34|