1. 程式人生 > 其它 >小新學Java18-【函式式介面】

小新學Java18-【函式式介面】

一、函式式介面

1.1概念

1.2格式

1.3@FunctionalInterface註解

@FunctionalInterface註解
作用:可以檢測介面是否是一個函式式介面
是:編譯成功
否:編譯失敗(介面中沒有抽象方法或者抽象方法的個數多餘1個)

1.4自定義函式式介面

二、函數語言程式設計

2.1 Lambda的延遲執行

效能浪費的日誌案例

體驗Lambda的更優寫法

證明Lambda的延遲

2.2使用Lambda作為引數和返回值

三、常用函式式介面

3.1 Supplier介面

java.util.function.Supplier<T>介面僅包含一個無參的方法:T get()。
用來獲取一個泛型引數指定型別的物件資料。
Supplier<T>介面被稱之為生產型介面,指定介面的泛型是什麼型別,那麼介面中的get方法就會生產什麼型別的資料

3.2練習∶求陣列元素最大值

3.3 Consumer介面

抽象方法: accept

java.util.function.Consumer<T>介面則正好與supplier介面相反,
    它不是生產一個數據,而是消費一個數據,其資料型別由泛型決定。

Consumer介面中包含抽象方法void accept(T t),意為消費一個指定泛型的資料。

Consumer介面是一個消費型介面,泛型執行什麼型別,就可以使用accept方法消費什麼型別的資料
至於具體怎麼消費(使用)需要自定義(輸出,計算....)

預設方法: andThen

consumer介面的預設方法andThen

作用:需要兩個consumer介面,可以把兩個Consumer介面組合到一起,再對資料進行消費
例如:
consumer<String> con1
consumer<String> con2
string s = "hello";
con1.accept( s);
con2.accept(s);

連線兩個consumer介面再進行消費
con1.andThen(con2).accept(s);誰寫前邊誰先消費

3.4練習:格式化列印資訊

3.5 Predicate介面

抽象方法:test

java.util.function.Predicate<T>介面
  作用:對某種資料型別的資料進行判街,結果返回一個boolean值
  Predicate介面中包含一個抽象方法:
  boolean test(T t):用來對指定資料型別資料進行判斷的方法
   
 結果:
      符合條件,返回true
      不符合條件,返回false
邏輯表示式:可以連線多個判斷的條件
&&:與運算子,有false則false
||:或運算子,有true則true
!:非(取反)運算子,非真則假,非假則真
預設方法
Predicate介面中有一個方法and,表示並且關係,也可以用於連線兩個判斷條件
default Predicate<T> and(Predicate<? super T> other){
Object.requireNonNull(other);
return(t) ->this.test(t) && other.test(t);
}
方法內部的兩個判斷條件也是用&&連線起來的
Predicate介面中有一個方法or,表示或者關係,也可以用於連線兩個判斷條件
default Predicate<T> or(Predicate<? super T> other){
Object.requireNonNull(other);
return(t) ->this.test(t) || other.test(t);
}
方法內部的兩個判斷條件也是用||連線起來的
Predicate介面中有一個方法negate,也表示取反的意思
default predicate<T> negate() {
return (t) ->!test(t);
}

3.6 練習:集合資訊篩選

3.7Function介面

抽象方法:apply

java.util.Function.Function<T,R>介面用來根據一個型別的資料得到另一個型別的資料,
前者稱為前置條件,後者稱為後置條件。

Function介面中最主要的抽象方法為:R apply(T t),根據型別T的引數獲取型別R的結果。

使用的場景例如:將string型別轉換為Integer型別。

預設方法andThen

Function介面中的預設方法andThen:用來進行組合操作

3.8自定義函式模型拼接