成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

樂(lè)字節(jié)-Java8新特性之函數(shù)式接口

lakeside / 1306人閱讀

摘要:上一篇小樂(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代表了一個(gè)接受兩個(gè)輸入?yún)?shù)的操作,并且不返回任何結(jié)果
2 BiFunction代表了一個(gè)接受兩個(gè)輸入?yún)?shù)的方法,并且返回一個(gè)結(jié)果
3 BinaryOperator代表了一個(gè)作用于于兩個(gè)同類型操作符的操作,并且返回了操作符同類型的結(jié)果
4 BiPredicate代表了一個(gè)兩個(gè)參數(shù)的boolean值方法
5 BooleanSupplier代表了boolean值結(jié)果的提供方
6 Consumer代表了接受一個(gè)輸入?yún)?shù)并且無(wú)返回的操作
7 DoubleBinaryOperator代表了作用于兩個(gè)double值操作符的操作,并且返回了一個(gè)double值的結(jié)果。
8 DoubleConsumer代表一個(gè)接受double值參數(shù)的操作,并且不返回結(jié)果。
9 DoubleFunction代表接受一個(gè)double值參數(shù)的方法,并且返回結(jié)果
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接受一個(gè)輸入?yún)?shù),返回一個(gè)結(jié)果。
16 IntBinaryOperator接受兩個(gè)參數(shù)同為類型int,返回值類型也為int 。
17 IntConsumer接受一個(gè)int類型的輸入?yún)?shù),無(wú)返回值 。
18 IntFunction接受一個(gè)int類型輸入?yún)?shù),返回一個(gè)結(jié)果 。
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接受一個(gè)long類型輸入?yún)?shù),返回一個(gè)結(jié)果。
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接受一個(gè)object類型和一個(gè)double類型的輸入?yún)?shù),無(wú)返回值。
33 ObjIntConsumer接受一個(gè)object類型和一個(gè)int類型的輸入?yún)?shù),無(wú)返回值。
34 ObjLongConsumer接受一個(gè)object類型和一個(gè)long類型的輸入?yún)?shù),無(wú)返回值。
35 Predicate接受一個(gè)輸入?yún)?shù),返回一個(gè)布爾值結(jié)果。
36 Supplier無(wú)參數(shù),返回一個(gè)結(jié)果。
37 ToDoubleBiFunction接受兩個(gè)輸入?yún)?shù),返回一個(gè)double類型結(jié)果
38 ToDoubleFunction接受一個(gè)輸入?yún)?shù),返回一個(gè)double類型結(jié)果
39 ToIntBiFunction接受兩個(gè)輸入?yún)?shù),返回一個(gè)int類型結(jié)果。
40 ToIntFunction接受一個(gè)輸入?yún)?shù),返回一個(gè)int類型結(jié)果。
41 ToLongBiFunction接受兩個(gè)輸入?yún)?shù),返回一個(gè)long類型結(jié)果。
42 ToLongFunction接受一個(gè)輸入?yún)?shù),返回一個(gè)long類型結(jié)果。
43 UnaryOperator接受一個(gè)參數(shù)為類型T,返回值類型也為T。

對(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 接口定義了一個(gè)名叫 test 的抽象方法,它接受泛型 T 對(duì)象,并返回一個(gè)boolean值。在對(duì)類型 T進(jìn)行斷言判斷時(shí),可以使用這個(gè)接口。通常稱為斷言性接口 。

使用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方法
        */
    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è)試結(jié)果:

2.2、Consumer

java.util.function.Consumer接口定義了一個(gè)名叫 accept 的抽象方法,它接受泛型T,沒(méi)有返回值(void)。如果需要訪問(wèn)類型 T 的對(duì)象,并對(duì)其執(zhí)行某些操作,可以使用這個(gè)接口,通常稱為消費(fèi)性接口。

使用Consumer實(shí)現(xiàn)集合遍歷操作

@FunctionalInterface
public interface Consumer {

    /**
     * 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);

2.3、Function

java.util.function.Function接口定義了一個(gè)叫作apply的方法,它接受一個(gè)泛型T的對(duì)象,并返回一個(gè)泛型R的對(duì)象。如果需要定義一個(gè)Lambda,將輸入的信息映射到輸出,可以使用這個(gè)接口(比如提取蘋(píng)果的重量,或把字符串映射為它的長(zhǎng)度),通常稱為功能性接口。

使用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é)果如下:

2.4、Supplier

java.util.function.Supplier接口定義了一個(gè)get的抽象方法,它沒(méi)有參數(shù),返回一個(gè)泛型T的對(duì)象,這類似于一個(gè)工廠方法,通常稱為功能性接口。

使用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

相關(guān)文章

  • 樂(lè)字節(jié)-Java8特性方法引用

    摘要:上一篇小樂(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)用,?方法引用是...

    Codeing_ls 評(píng)論0 收藏0
  • 樂(lè)字節(jié)-Java8核心特性實(shí)戰(zhàn)函數(shù)接口

    摘要:大家好,上一篇小樂(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?通常...

    niceforbear 評(píng)論0 收藏0
  • 樂(lè)字節(jié)Java8核心特性實(shí)戰(zhàn)方法引用

    摘要:大家好,我是樂(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...

    lakeside 評(píng)論0 收藏0
  • 樂(lè)字節(jié)-Java8特性Stream流(上)

    摘要:需要注意的是很多流操作本身就會(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...

    dingda 評(píng)論0 收藏0
  • 樂(lè)字節(jié)-Java8特性-接口默認(rèn)方法

    摘要:注意當(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 新特性列表如下:...

    arashicage 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<