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

Java中Lambda表達式和函數式接口的使用和特性

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

1.概述

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

2.lambda表達式的基礎

Lambda 表達式是一個匿名函數,由輸入參數和處理邏輯兩部分組成:

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

輸入或者輸出可以為空:

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

多參數用括號,單參數可以不用括號:

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

多條處理邏輯用花括號,單條處理邏輯可以不用花括號:

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

3.JAVA中的lambda表達式

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

interface MyInterface {
    void doSomething();
}

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

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

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

4.函數式接口

內置函數式接口

概述

JDK8內置實現了一些常用的函數式接口:

接口作用
Function程序中映射邏輯的抽象
Predicate程序中判斷邏輯的抽象
Consumer程序中的消費型邏輯的抽象
Suppiler程序中的生產邏輯的抽象

Function

Function接口,可以定義入參和出參的類型,可用于類型轉換。

代碼示例:

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;
        // 測試字符串的長度是否>0
        System.out.println(predicate.test("hello"));
        // 結果取反
        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接口,又叫消費接口,沒有返回值,就像把輸入消費掉了一樣。

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

Suppiler

Suppiler接口,又叫生產接口,可以自定義返回值,用來生產一些東西。

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

5.級聯與柯里化

級聯表達式,含有多個箭頭的lambda表達式,即“套娃”lambda表達式。

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

x->y->x+y

假設輸入的為Integer類型,

用Function接口來表達即為:

輸入一個Integer x,返回一個Integer y,

Integer y又可以用Function接口來表示為:

輸入一個Integer,返回一個Integer

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

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

相關文章

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

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

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

    如何在IDEA中查看依賴關系的方法步驟

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

    spring源碼閱讀--@Transactional實現原理講解

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

    時間中間鍵的整理

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

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

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

    java 實現線程同步的方式有哪些

    當使用多個線程來訪問同一個數據時,非常容易出現線程安全問題,所以我們用同步機制來解決這些問題,本文將詳細介紹,需要的朋友可以參考下
    2012-11-11
  • java線程安全鎖ReentrantReadWriteLock原理分析readLock

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

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

    史上最全的java隨機數生成算法分享

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

    深入理解spring多數據源配置

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

    MySql多表查詢 事務及DCL

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

最新評論

天津市| 富民县| 财经| 新和县| 叙永县| 大理市| 彰武县| 和龙市| 西华县| 衢州市| 江津市| 祁阳县| 昌都县| 龙山县| 翁源县| 汉沽区| 克拉玛依市| 精河县| 会宁县| 蓬溪县| 封开县| 余庆县| 绍兴县| 屯留县| 石阡县| 怀远县| 南宁市| 新丰县| 育儿| 四会市| 阿拉善左旗| 乌兰浩特市| 邢台县| 江门市| 龙江县| 循化| 朝阳区| 汶上县| 宜城市| 青海省| 云霄县|