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