摘要:上一篇小樂帶大家學(xué)過新特性表達(dá)式,什么時候可以使用通常表達(dá)式是用在函數(shù)式接口上使用的。使用實現(xiàn)創(chuàng)建產(chǎn)生一個工廠對象以上就是小樂帶給大家的新特性之函數(shù)式接口,下一篇將會為大家?guī)硇绿匦灾椒ㄒ茫凑堦P(guān)注。
上一篇小樂帶大家學(xué)過 Java8新特性-Lambda表達(dá)式,什么時候可以使用Lambda?通常Lambda表達(dá)式是用在函數(shù)式接口上使用的。從Java8開始引入了函數(shù)式接口,其說明比較簡單:函數(shù)式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。 java8引入@FunctionalInterface 注解聲明該接口是一個函數(shù)式接口。
1、語法定義/** * 定義函數(shù)式接口 * 接口上標(biāo)注@FunctionalInterface 注解 */ @FunctionalInterface public interface ICollectionService { /** * 定義打印方法 */ void print(); }
在Java8 以前,已有大量函數(shù)式接口形式的接口(接口中只存在一個抽象方法),只是沒有強(qiáng)制聲明。例如:
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 新增加的函數(shù)接口在java.util.function 包下,它包含了很多類,用來支持 Java的 函數(shù)式編程,該包中的函數(shù)式接口有:
序號 接口 & 描述
1 BiConsumer
2 BiFunction
3 BinaryOperator
4 BiPredicate
5 BooleanSupplier代表了boolean值結(jié)果的提供方
6 Consumer
7 DoubleBinaryOperator代表了作用于兩個double值操作符的操作,并且返回了一個double值的結(jié)果。
8 DoubleConsumer代表一個接受double值參數(shù)的操作,并且不返回結(jié)果。
9 DoubleFunction
10 DoublePredicate代表一個擁有double值參數(shù)的boolean值方法
11 DoubleSupplier代表一個double值結(jié)構(gòu)的提供方
12 DoubleToIntFunction接受一個double類型輸入,返回一個int類型結(jié)果。
13 DoubleToLongFunction接受一個double類型輸入,返回一個long類型結(jié)果
14 DoubleUnaryOperator接受一個參數(shù)同為類型double,返回值類型也為double 。
15 Function
16 IntBinaryOperator接受兩個參數(shù)同為類型int,返回值類型也為int 。
17 IntConsumer接受一個int類型的輸入?yún)?shù),無返回值 。
18 IntFunction
19 IntPredicate:接受一個int輸入?yún)?shù),返回一個布爾值的結(jié)果。
20 IntSupplier無參數(shù),返回一個int類型結(jié)果。
21 IntToDoubleFunction接受一個int類型輸入,返回一個double類型結(jié)果 。
22 IntToLongFunction接受一個int類型輸入,返回一個long類型結(jié)果。
23 IntUnaryOperator接受一個參數(shù)同為類型int,返回值類型也為int 。
24 LongBinaryOperator接受兩個參數(shù)同為類型long,返回值類型也為long。
25 LongConsumer接受一個long類型的輸入?yún)?shù),無返回值。
26 LongFunction
27 LongPredicateR接受一個long輸入?yún)?shù),返回一個布爾值類型結(jié)果。
28 LongSupplier無參數(shù),返回一個結(jié)果long類型的值。
29 LongToDoubleFunction接受一個long類型輸入,返回一個double類型結(jié)果。
30 LongToIntFunction接受一個long類型輸入,返回一個int類型結(jié)果。
31 LongUnaryOperator接受一個參數(shù)同為類型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中提供的這么多函數(shù)式接口,開發(fā)中常用的函數(shù)式接口有以下幾個
Predicate,Consumer,F(xiàn)unction,Supplier。2、函數(shù)式接口實例 2.1、Predicate
java.util.function.Predicate
使用Predicate接口實現(xiàn)字符串判空操作
@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 表達(dá)式實現(xiàn)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 表達(dá)式實現(xiàn)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")); }
測試結(jié)果:
java.util.function.Consumer
使用Consumer實現(xiàn)集合遍歷操作
@FunctionalInterface public interface Consumer2.3、Function{ /** * Performs this operation on the given argument. * * @param t the input argument */ void accept(T t); ... } /** * 借助Lambda表達(dá)式實現(xiàn)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("關(guān)羽"); // 遍歷list 輸出元素內(nèi)容到控制臺 c01.accept(list);
java.util.function.Function
使用Function實現(xiàn)用戶密碼 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); } // 實現(xiàn)用戶密碼 Base64加密操作 Function f01=(password)->Base64.getEncoder().encodeToString(password.getBytes()); // 輸出加密后的字符串 System.out.println(f01.apply("123456"));
加密后結(jié)果如下:
java.util.function.Supplier
使用Supplier實現(xiàn)SessionFactory創(chuàng)建
@FunctionalInterface public interface Supplier{ /** * Gets a result. * * @return a result */ T get(); } /** * 產(chǎn)生一個session工廠對象 */ Supplier s = () -> { return new SessionFactory(); }; s.get().info();
以上就是小樂帶給大家的Java8新特性之函數(shù)式接口,下一篇將會為大家?guī)鞪ava8新特性之方法引用,敬請關(guān)注。
轉(zhuǎn)載請注明文章出處和作者,謝謝合作!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74077.html
摘要:上一篇小樂介紹了新特性函數(shù)式接口,大家可以點擊回顧。中引入方法引用新特性用于簡化應(yīng)用對象方法的調(diào)用,方法引用是用來直接訪問類或者實例的已經(jīng)存在的方法或者構(gòu)造方法。方法引用是一種更簡潔易懂的表達(dá)式。 上一篇小樂介紹了《Java8新特性-函數(shù)式接口》,大家可以點擊回顧。這篇文章將接著介紹Java8新特性之方法引用。 Java8 中引入方法引用新特性,用于簡化應(yīng)用對象方法的調(diào)用,?方法引用是...
摘要:大家好,上一篇小樂給大家講述了樂字節(jié)核心特性表達(dá)式,點擊回顧。接下來繼續(xù)核心特性之函數(shù)式接口。感謝大家欣賞小樂帶來的核心特性之函數(shù)式接口,接下來還會更多核心技術(shù)講解,請關(guān)注樂字節(jié)如需要視頻課程,請搜索樂字節(jié)騰訊課堂 大家好,上一篇小樂給大家講述了《樂字節(jié)-Java8核心特性-Lambda表達(dá)式》,點擊回顧。接下來繼續(xù):Java8核心特性之函數(shù)式接口。 什么時候可以使用Lambda?通常...
摘要:大家好,我是樂字節(jié)的小樂,上一次我們說到了核心特性之函數(shù)式接口,接下來我們繼續(xù)了解又一核心特性方法引用。方法引用是一種更簡潔易懂的表達(dá)式。感謝光臨閱讀小樂的,敬請關(guān)注樂字節(jié)后續(xù)將繼續(xù)講述等前沿知識技術(shù)。 大家好,我是樂字節(jié)的小樂,上一次我們說到了Java8核心特性之函數(shù)式接口,接下來我們繼續(xù)了解Java8又一核心特性——方法引用。 showImg(https://segmentfaul...
摘要:需要注意的是很多流操作本身就會返回一個流,所以多個操作可以直接連接起來,如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實現(xiàn)數(shù)據(jù)流并行處理操作。為集合創(chuàng)建并行流。 上一篇文章,小樂給大家介紹了《Java8新特性之方法引用》,下面接下來小樂將會給大家介紹Java8新特性之Stream,稱之為流,本篇文章為上半部分。 1、什么是流? Java Se中對于流的操作有輸入輸出IO流,而Jav...
摘要:注意當(dāng)多個父接口中存在相同的默認(rèn)方法時,子類中以就近原則繼承。定義靜態(tài)默認(rèn)方法這是版簡易計算器接口默認(rèn)方法使用定義接口并提供默認(rèn)打印方法定義接口默認(rèn)方法支持方法形參這是數(shù)值運算基本接口。。。 總概 JAVA8 已經(jīng)發(fā)布很久,而且毫無疑問,java8是自java5(2004年發(fā)布)之后的最重要的版本。其中包括語言、編譯器、庫、工具和JVM等諸多方面的新特性。 Java8 新特性列表如下:...
閱讀 2998·2021-10-12 10:17
閱讀 1601·2021-09-01 11:38
閱讀 1094·2019-08-30 15:44
閱讀 3491·2019-08-26 18:36
閱讀 524·2019-08-26 13:25
閱讀 1892·2019-08-26 10:29
閱讀 2845·2019-08-23 15:58
閱讀 768·2019-08-23 12:59