国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

樂字節-Java8新特性之函數式接口

lakeside / 1304人閱讀

摘要:上一篇小樂帶大家學過新特性表達式,什么時候可以使用通常表達式是用在函數式接口上使用的。使用實現創建產生一個工廠對象以上就是小樂帶給大家的新特性之函數式接口,下一篇將會為大家帶來新特性之方法引用,敬請關注。

上一篇小樂帶大家學過 Java8新特性-Lambda表達式,什么時候可以使用Lambda?通常Lambda表達式是用在函數式接口上使用的。從Java8開始引入了函數式接口,其說明比較簡單:函數式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。 java8引入@FunctionalInterface 注解聲明該接口是一個函數式接口。

1、語法定義
/**
 * 定義函數式接口
 * 接口上標注@FunctionalInterface 注解
 */
@FunctionalInterface
public interface ICollectionService {
    /**
     * 定義打印方法
     */
    void print();
}

在Java8 以前,已有大量函數式接口形式的接口(接口中只存在一個抽象方法),只是沒有強制聲明。例如:

java.lang.Runnable

java.util.concurrent.Callable

java.security.PrivilegedAction

java.io.FileFilter

java.nio.file.PathMatcher

java.lang.reflect.InvocationHandler

java.beans.PropertyChangeListener

java.awt.event.ActionListener

javax.swing.event.ChangeListener

Java8 新增加的函數接口在java.util.function 包下,它包含了很多類,用來支持 Java的 函數式編程,該包中的函數式接口有:

序號 接口 & 描述
1 BiConsumer代表了一個接受兩個輸入參數的操作,并且不返回任何結果
2 BiFunction代表了一個接受兩個輸入參數的方法,并且返回一個結果
3 BinaryOperator代表了一個作用于于兩個同類型操作符的操作,并且返回了操作符同類型的結果
4 BiPredicate代表了一個兩個參數的boolean值方法
5 BooleanSupplier代表了boolean值結果的提供方
6 Consumer代表了接受一個輸入參數并且無返回的操作
7 DoubleBinaryOperator代表了作用于兩個double值操作符的操作,并且返回了一個double值的結果。
8 DoubleConsumer代表一個接受double值參數的操作,并且不返回結果。
9 DoubleFunction代表接受一個double值參數的方法,并且返回結果
10 DoublePredicate代表一個擁有double值參數的boolean值方法
11 DoubleSupplier代表一個double值結構的提供方
12 DoubleToIntFunction接受一個double類型輸入,返回一個int類型結果。
13 DoubleToLongFunction接受一個double類型輸入,返回一個long類型結果
14 DoubleUnaryOperator接受一個參數同為類型double,返回值類型也為double 。
15 Function接受一個輸入參數,返回一個結果。
16 IntBinaryOperator接受兩個參數同為類型int,返回值類型也為int 。
17 IntConsumer接受一個int類型的輸入參數,無返回值 。
18 IntFunction接受一個int類型輸入參數,返回一個結果 。
19 IntPredicate:接受一個int輸入參數,返回一個布爾值的結果。
20 IntSupplier無參數,返回一個int類型結果。
21 IntToDoubleFunction接受一個int類型輸入,返回一個double類型結果 。
22 IntToLongFunction接受一個int類型輸入,返回一個long類型結果。
23 IntUnaryOperator接受一個參數同為類型int,返回值類型也為int 。
24 LongBinaryOperator接受兩個參數同為類型long,返回值類型也為long。
25 LongConsumer接受一個long類型的輸入參數,無返回值。
26 LongFunction接受一個long類型輸入參數,返回一個結果。
27 LongPredicateR接受一個long輸入參數,返回一個布爾值類型結果。
28 LongSupplier無參數,返回一個結果long類型的值。
29 LongToDoubleFunction接受一個long類型輸入,返回一個double類型結果。
30 LongToIntFunction接受一個long類型輸入,返回一個int類型結果。
31 LongUnaryOperator接受一個參數同為類型long,返回值類型也為long。
32 ObjDoubleConsumer接受一個object類型和一個double類型的輸入參數,無返回值。
33 ObjIntConsumer接受一個object類型和一個int類型的輸入參數,無返回值。
34 ObjLongConsumer接受一個object類型和一個long類型的輸入參數,無返回值。
35 Predicate接受一個輸入參數,返回一個布爾值結果。
36 Supplier無參數,返回一個結果。
37 ToDoubleBiFunction接受兩個輸入參數,返回一個double類型結果
38 ToDoubleFunction接受一個輸入參數,返回一個double類型結果
39 ToIntBiFunction接受兩個輸入參數,返回一個int類型結果。
40 ToIntFunction接受一個輸入參數,返回一個int類型結果。
41 ToLongBiFunction接受兩個輸入參數,返回一個long類型結果。
42 ToLongFunction接受一個輸入參數,返回一個long類型結果。
43 UnaryOperator接受一個參數為類型T,返回值類型也為T。

對于Java8中提供的這么多函數式接口,開發中常用的函數式接口有以下幾個

Predicate,Consumer,Function,Supplier。

2、函數式接口實例 2.1、Predicate

java.util.function.Predicate 接口定義了一個名叫 test 的抽象方法,它接受泛型 T 對象,并返回一個boolean值。在對類型 T進行斷言判斷時,可以使用這個接口。通常稱為斷言性接口 。

使用Predicate接口實現字符串判空操作

@FunctionalInterface
public interface Predicate {

    /**
     * Evaluates this predicate on the given argument.
     *
     * @param t the input argument
     * @return {@code true} if the input argument matches the predicate,
     * otherwise {@code false}
     */
    boolean test(T t);
    ...
}

public static void main(String[] args) {
    /**
      * 借助Lambda  表達式實現Predicate test方法
        */
    Predicate p01=(str)->str.isEmpty()||str.trim().isEmpty();
    /**
     * 測試傳入的字符串是否為空
      */
    System.out.println(p01.test(""));
    System.out.println(p01.test("  "));
    System.out.println(p01.test("admin"));
}

測試代碼

public static void main(String[] args) {
    /**
      * 借助Lambda  表達式實現Predicate test方法
        */
    Predicate p01=(str)->str.isEmpty()||str.trim().isEmpty();
    /**
     * 測試傳入的字符串是否為空
      */
    System.out.println(p01.test(""));
    System.out.println(p01.test("  "));
    System.out.println(p01.test("admin"));
}



測試結果:

2.2、Consumer

java.util.function.Consumer接口定義了一個名叫 accept 的抽象方法,它接受泛型T,沒有返回值(void)。如果需要訪問類型 T 的對象,并對其執行某些操作,可以使用這個接口,通常稱為消費性接口。

使用Consumer實現集合遍歷操作

@FunctionalInterface
public interface Consumer {

    /**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);
    ...
}


/**
* 借助Lambda表達式實現Consumer  accept方法
*/
Consumer c01 = (collection) -> {
if (null != collection && collection.size() > 0) {
for (Object c : collection) {
System.out.println(c);
}
}
};

List list = new ArrayList();
list.add("諸葛亮");
list.add("曹操");
list.add("關羽");

// 遍歷list 輸出元素內容到控制臺
c01.accept(list);

2.3、Function

java.util.function.Function接口定義了一個叫作apply的方法,它接受一個泛型T的對象,并返回一個泛型R的對象。如果需要定義一個Lambda,將輸入的信息映射到輸出,可以使用這個接口(比如提取蘋果的重量,或把字符串映射為它的長度),通常稱為功能性接口。

使用Function實現用戶密碼 Base64加密操作

@FunctionalInterface
public interface Function {

    /**
     * Applies this function to the given argument.
     *
     * @param t the function argument
     * @return the function result
     */
    R apply(T t);
}


// 實現用戶密碼 Base64加密操作
Function f01=(password)->Base64.getEncoder().encodeToString(password.getBytes());
// 輸出加密后的字符串
System.out.println(f01.apply("123456"));


加密后結果如下:

2.4、Supplier

java.util.function.Supplier接口定義了一個get的抽象方法,它沒有參數,返回一個泛型T的對象,這類似于一個工廠方法,通常稱為功能性接口。

使用Supplier實現SessionFactory創建

@FunctionalInterface
public interface Supplier {

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

/**
 * 產生一個session工廠對象
 */
Supplier s = () -> {
    return new SessionFactory();
};

s.get().info();

以上就是小樂帶給大家的Java8新特性之函數式接口,下一篇將會為大家帶來Java8新特性之方法引用,敬請關注。

轉載請注明文章出處和作者,謝謝合作!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74077.html

相關文章

  • 字節-Java8特性方法引用

    摘要:上一篇小樂介紹了新特性函數式接口,大家可以點擊回顧。中引入方法引用新特性用于簡化應用對象方法的調用,方法引用是用來直接訪問類或者實例的已經存在的方法或者構造方法。方法引用是一種更簡潔易懂的表達式。 上一篇小樂介紹了《Java8新特性-函數式接口》,大家可以點擊回顧。這篇文章將接著介紹Java8新特性之方法引用。 Java8 中引入方法引用新特性,用于簡化應用對象方法的調用,?方法引用是...

    Codeing_ls 評論0 收藏0
  • 字節-Java8核心特性實戰函數接口

    摘要:大家好,上一篇小樂給大家講述了樂字節核心特性表達式,點擊回顧。接下來繼續核心特性之函數式接口。感謝大家欣賞小樂帶來的核心特性之函數式接口,接下來還會更多核心技術講解,請關注樂字節如需要視頻課程,請搜索樂字節騰訊課堂 大家好,上一篇小樂給大家講述了《樂字節-Java8核心特性-Lambda表達式》,點擊回顧。接下來繼續:Java8核心特性之函數式接口。 什么時候可以使用Lambda?通常...

    niceforbear 評論0 收藏0
  • 字節Java8核心特性實戰方法引用

    摘要:大家好,我是樂字節的小樂,上一次我們說到了核心特性之函數式接口,接下來我們繼續了解又一核心特性方法引用。方法引用是一種更簡潔易懂的表達式。感謝光臨閱讀小樂的,敬請關注樂字節后續將繼續講述等前沿知識技術。 大家好,我是樂字節的小樂,上一次我們說到了Java8核心特性之函數式接口,接下來我們繼續了解Java8又一核心特性——方法引用。 showImg(https://segmentfaul...

    lakeside 評論0 收藏0
  • 字節-Java8特性Stream流(上)

    摘要:需要注意的是很多流操作本身就會返回一個流,所以多個操作可以直接連接起來,如下圖這樣,操作可以進行鏈式調用,并且并行流還可以實現數據流并行處理操作。為集合創建并行流。 上一篇文章,小樂給大家介紹了《Java8新特性之方法引用》,下面接下來小樂將會給大家介紹Java8新特性之Stream,稱之為流,本篇文章為上半部分。 1、什么是流? Java Se中對于流的操作有輸入輸出IO流,而Jav...

    dingda 評論0 收藏0
  • 字節-Java8特性-接口默認方法

    摘要:注意當多個父接口中存在相同的默認方法時,子類中以就近原則繼承。定義靜態默認方法這是版簡易計算器接口默認方法使用定義接口并提供默認打印方法定義接口默認方法支持方法形參這是數值運算基本接口。。。 總概 JAVA8 已經發布很久,而且毫無疑問,java8是自java5(2004年發布)之后的最重要的版本。其中包括語言、編譯器、庫、工具和JVM等諸多方面的新特性。 Java8 新特性列表如下:...

    arashicage 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<