最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Lambda表達(dá)式和函數(shù)式接口的使用和特性

 更新時(shí)間:2023年04月20日 11:08:31   作者:_BugMan  
Java Lambda表達(dá)式是一種函數(shù)式編程的特性,可簡(jiǎn)化匿名內(nèi)部類的寫法,與函數(shù)式接口搭配使用,實(shí)現(xiàn)代碼簡(jiǎn)潔、可讀性高、易于維護(hù)的特點(diǎn),適用于集合操作、多線程編程等場(chǎng)景

1.概述

當(dāng)Java 8發(fā)布時(shí),其中最令人興奮的特性之一就是 Lambda 表達(dá)式。Lambda 表達(dá)式是一種輕量級(jí)、簡(jiǎn)潔和高效的函數(shù)式編程方法。它可以用來(lái)代替 Java 舊有的匿名內(nèi)部類,提高代碼的可讀性和可維護(hù)性。

2.lambda表達(dá)式的基礎(chǔ)

Lambda 表達(dá)式是一個(gè)匿名函數(shù),由輸入?yún)?shù)和處理邏輯兩部分組成:

(parameter1, parameter2, ...) -> { code block }

輸入或者輸出可以為空:

() -> System.out.println("Hello, world!")
(a) -> {}
() -> {}

多參數(shù)用括號(hào),單參數(shù)可以不用括號(hào):

(a,b) -> a+b
a -> System.out.print(a)

多條處理邏輯用花括號(hào),單條處理邏輯可以不用花括號(hào):

(a,b) -> a+b;
(a,b) -> {a+b;a-b;}

3.JAVA中的lambda表達(dá)式

要在 Java 中使用 Lambda 表達(dá)式,需要將它們賦值給一個(gè)函數(shù)式接口變量。函數(shù)式接口是只包含一個(gè)抽象方法的接口,它們提供了一種定義 Lambda 表達(dá)式類型的方式。例如,下面的函數(shù)式接口 MyInterface 包含了一個(gè)抽象方法 doSomething

interface MyInterface {
    void doSomething();
}

要使用 Lambda 表達(dá)式實(shí)現(xiàn)這個(gè)接口,只需要提供一個(gè)與 doSomething 方法簽名匹配的 Lambda 表達(dá)式即可。例如,下面的代碼使用 Lambda 表達(dá)式創(chuàng)建了一個(gè) MyInterface 對(duì)象,并調(diào)用了它的 doSomething 方法:

MyInterface myLambda = () -> System.out.println("Hello, world!");
myLambda.doSomething();

在這個(gè)例子中,我們使用 Lambda 表達(dá)式創(chuàng)建了一個(gè) MyInterface 對(duì)象,并將它賦值給了 myLambda 變量。然后,我們調(diào)用了 myLambda.doSomething() 方法,輸出了 Hello, world!。

4.函數(shù)式接口

內(nèi)置函數(shù)式接口

概述

JDK8內(nèi)置實(shí)現(xiàn)了一些常用的函數(shù)式接口:

接口作用
Function程序中映射邏輯的抽象
Predicate程序中判斷邏輯的抽象
Consumer程序中的消費(fèi)型邏輯的抽象
Suppiler程序中的生產(chǎn)邏輯的抽象

Function

Function接口,可以定義入?yún)⒑统鰠⒌念愋停捎糜陬愋娃D(zhuǎn)換。

代碼示例:

Function<String,Integer> function=(String i)-> Integer.parseInt(i);
System.out.println(function.apply("1")==1);

Predicate

Predicate接口,指定返回值為布爾類型,可用于斷言。

public static void main(String[] args) {
        Predicate<String> predicate = (s) -> s.length() > 0;
        // 測(cè)試字符串的長(zhǎng)度是否>0
        System.out.println(predicate.test("hello"));
        // 結(jié)果取反
        System.out.println(predicate.negate().test("hello"));
        System.out.println("=====or / and======");
        System.out.println(predicate.test(""));
        // 增加或判斷,二者滿足其一則為true
        System.out.println(predicate.or(s -> s.equals("")).test(""));
        // 增加與判斷,二者都滿足則為true
        System.out.println(predicate.and(s -> s.equals("hello")).test(""));
        System.out.println(predicate.and(s -> s.equals("hello")).test("hello"));
        System.out.println("=====isEqual======");
        // 判斷是否相等
        System.out.println(Predicate.isEqual("hello").test(""));
        System.out.println(Predicate.isEqual("hello").test("hello"));
        Predicate<Boolean> nonNull = Objects::nonNull;
        Predicate<Boolean> isNull = Objects::isNull;
        Predicate<String> isEmpty = String::isEmpty;
        Predicate<String> isNotEmpty = isEmpty.negate();
    }

Consumer

Consumer接口,又叫消費(fèi)接口,沒(méi)有返回值,就像把輸入消費(fèi)掉了一樣。

public static void main(String[] args) {
   Consumer<Object> consumer1 = new Consumer<Object>() {
   @Override
   public void accept(Object o) {
     System.out.println("這次消費(fèi)了:" + o.toString());
     }
   };
   consumer1.accept("100w元在雙十一!這下窮死了!");
   Consumer<String> consumer2 = s -> System.out.println("這次消費(fèi)了:" + s);
   consumer2.accept("120w元在雙十二!又窮死了!");
}

Suppiler

Suppiler接口,又叫生產(chǎn)接口,可以自定義返回值,用來(lái)生產(chǎn)一些東西。

public static void main(String[] args) {
    // 生成一個(gè)字符串
    Supplier<String> supplier1 = () -> "abcde";
    // 生成一個(gè)隨機(jī)數(shù)
    Supplier<Integer> supplier2 = () -> new Random().nextInt(10);
    // 產(chǎn)生一個(gè)運(yùn)行時(shí)異常
    Supplier<RuntimeException> supplier3 = () -> new RuntimeException();
    System.out.println(supplier1.get());
    System.out.println(supplier2.get().intValue());
    System.out.println(supplier3.get());
}

5.級(jí)聯(lián)與柯里化

級(jí)聯(lián)表達(dá)式,含有多個(gè)箭頭的lambda表達(dá)式,即“套娃”lambda表達(dá)式。

以下列l(wèi)ambda表達(dá)式為例:

x->y->x+y

假設(shè)輸入的為Integer類型,

用Function接口來(lái)表達(dá)即為:

輸入一個(gè)Integer x,返回一個(gè)Integer y,

Integer y又可以用Function接口來(lái)表示為:

輸入一個(gè)Integer,返回一個(gè)Integer

Function<Integer,Function<Integer,Integer>> functionFunction= x->y->x+y;
System.out.println(functionFunction.apply(2).apply(3));

到此這篇關(guān)于Java中Lambda表達(dá)式和函數(shù)式接口的使用和特性的文章就介紹到這了,更多相關(guān)Java lambda表達(dá)式與函數(shù)式接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Java list.remove( )方法需要注意的兩個(gè)坑

    淺談Java list.remove( )方法需要注意的兩個(gè)坑

    這篇文章主要介紹了淺談Java list.remove( )方法需要注意的兩個(gè)坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 如何在IDEA中查看依賴關(guān)系的方法步驟

    如何在IDEA中查看依賴關(guān)系的方法步驟

    這篇文章主要介紹了如何在IDEA中查看依賴關(guān)系的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • spring源碼閱讀--@Transactional實(shí)現(xiàn)原理講解

    spring源碼閱讀--@Transactional實(shí)現(xiàn)原理講解

    這篇文章主要介紹了spring源碼閱讀--@Transactional實(shí)現(xiàn)原理講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 時(shí)間中間鍵的整理

    時(shí)間中間鍵的整理

    這篇文章主要介紹了時(shí)間中間鍵的整理的相關(guān)資料,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • 淺談System.getenv()和System.getProperty()的區(qū)別

    淺談System.getenv()和System.getProperty()的區(qū)別

    這篇文章主要介紹了System.getenv()和System.getProperty()的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java 實(shí)現(xiàn)線程同步的方式有哪些

    java 實(shí)現(xiàn)線程同步的方式有哪些

    當(dāng)使用多個(gè)線程來(lái)訪問(wèn)同一個(gè)數(shù)據(jù)時(shí),非常容易出現(xiàn)線程安全問(wèn)題,所以我們用同步機(jī)制來(lái)解決這些問(wèn)題,本文將詳細(xì)介紹,需要的朋友可以參考下
    2012-11-11
  • java線程安全鎖ReentrantReadWriteLock原理分析readLock

    java線程安全鎖ReentrantReadWriteLock原理分析readLock

    這篇文章主要為大家介紹了java線程安全鎖ReentrantReadWriteLock原理分析readLock,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 史上最全的java隨機(jī)數(shù)生成算法分享

    史上最全的java隨機(jī)數(shù)生成算法分享

    這篇文章主要介紹了史上最全的java隨機(jī)數(shù)生成算法,我分享一個(gè)最全的隨機(jī)數(shù)的生成算法,最代碼的找回密碼的隨機(jī)數(shù)就是用的這個(gè)方法
    2014-01-01
  • 深入理解spring多數(shù)據(jù)源配置

    深入理解spring多數(shù)據(jù)源配置

    項(xiàng)目中我們經(jīng)常會(huì)遇到多數(shù)據(jù)源的問(wèn)題,尤其是數(shù)據(jù)同步或定時(shí)任務(wù)等項(xiàng)目更是如此。本篇文章主要介紹了spring多數(shù)據(jù)源配置,有興趣的可以了解一下。
    2017-01-01
  • MySql多表查詢 事務(wù)及DCL

    MySql多表查詢 事務(wù)及DCL

    這篇文章主要介紹了MySql多表查詢 、事務(wù)、DCL的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09

最新評(píng)論

且末县| 三原县| 枣强县| 彝良县| 和平县| 拉萨市| 麻江县| 花莲县| 白城市| 五寨县| 紫云| 荣昌县| 灵川县| 新河县| 万安县| 襄汾县| 枞阳县| 纳雍县| 舟曲县| 闵行区| 夏津县| 都江堰市| 利辛县| 广安市| 无极县| 青冈县| 溧阳市| 海门市| 奈曼旗| 石林| 康平县| 漠河县| 宝清县| 天镇县| 温泉县| 台北市| 大化| 昌江| 平舆县| 墨江| 广水市|