摘要:上一篇小樂帶大家學過新特性表達式,什么時候可以使用通常表達式是用在函數式接口上使用的。使用實現創建產生一個工廠對象以上就是小樂帶給大家的新特性之函數式接口,下一篇將會為大家帶來新特性之方法引用,敬請關注。
上一篇小樂帶大家學過 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
5 BooleanSupplier代表了boolean值結果的提供方
6 Consumer
7 DoubleBinaryOperator代表了作用于兩個double值操作符的操作,并且返回了一個double值的結果。
8 DoubleConsumer代表一個接受double值參數的操作,并且不返回結果。
9 DoubleFunction
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
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
27 LongPredicateR接受一個long輸入參數,返回一個布爾值類型結果。
28 LongSupplier無參數,返回一個結果long類型的值。
29 LongToDoubleFunction接受一個long類型輸入,返回一個double類型結果。
30 LongToIntFunction接受一個long類型輸入,返回一個int類型結果。
31 LongUnaryOperator接受一個參數同為類型long,返回值類型也為long。
32 ObjDoubleConsumer
33 ObjIntConsumer
34 ObjLongConsumer
35 Predicate
36 Supplier
37 ToDoubleBiFunction
38 ToDoubleFunction
39 ToIntBiFunction
40 ToIntFunction
41 ToLongBiFunction
42 ToLongFunction
43 UnaryOperator
對于Java8中提供的這么多函數式接口,開發中常用的函數式接口有以下幾個
Predicate,Consumer,Function,Supplier。2、函數式接口實例 2.1、Predicate
java.util.function.Predicate
使用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方法 */ Predicatep01=(str)->str.isEmpty()||str.trim().isEmpty(); /** * 測試傳入的字符串是否為空 */ System.out.println(p01.test("")); System.out.println(p01.test(" ")); System.out.println(p01.test("admin")); }
測試結果:
java.util.function.Consumer
使用Consumer實現集合遍歷操作
@FunctionalInterface public interface Consumer2.3、Function{ /** * 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);
java.util.function.Function
使用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"));
加密后結果如下:
java.util.function.Supplier
使用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核心特性-Lambda表達式》,點擊回顧。接下來繼續:Java8核心特性之函數式接口。 什么時候可以使用Lambda?通常...
摘要:大家好,我是樂字節的小樂,上一次我們說到了核心特性之函數式接口,接下來我們繼續了解又一核心特性方法引用。方法引用是一種更簡潔易懂的表達式。感謝光臨閱讀小樂的,敬請關注樂字節后續將繼續講述等前沿知識技術。 大家好,我是樂字節的小樂,上一次我們說到了Java8核心特性之函數式接口,接下來我們繼續了解Java8又一核心特性——方法引用。 showImg(https://segmentfaul...
摘要:需要注意的是很多流操作本身就會返回一個流,所以多個操作可以直接連接起來,如下圖這樣,操作可以進行鏈式調用,并且并行流還可以實現數據流并行處理操作。為集合創建并行流。 上一篇文章,小樂給大家介紹了《Java8新特性之方法引用》,下面接下來小樂將會給大家介紹Java8新特性之Stream,稱之為流,本篇文章為上半部分。 1、什么是流? Java Se中對于流的操作有輸入輸出IO流,而Jav...
摘要:注意當多個父接口中存在相同的默認方法時,子類中以就近原則繼承。定義靜態默認方法這是版簡易計算器接口默認方法使用定義接口并提供默認打印方法定義接口默認方法支持方法形參這是數值運算基本接口。。。 總概 JAVA8 已經發布很久,而且毫無疑問,java8是自java5(2004年發布)之后的最重要的版本。其中包括語言、編譯器、庫、工具和JVM等諸多方面的新特性。 Java8 新特性列表如下:...
閱讀 2992·2021-10-12 10:17
閱讀 1594·2021-09-01 11:38
閱讀 1084·2019-08-30 15:44
閱讀 3483·2019-08-26 18:36
閱讀 514·2019-08-26 13:25
閱讀 1889·2019-08-26 10:29
閱讀 2840·2019-08-23 15:58
閱讀 763·2019-08-23 12:59