小新學Java18-【函式式介面】
阿新 • • 發佈:2022-12-13
一、函式式介面
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:用來進行組合操作