亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1.概述

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

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

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

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

輸入或者輸出可以為空:

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

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

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

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

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

3.JAVA中的lambda表達式

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

interface MyInterface {
    void doSomething();
}

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

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

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

4.函數(shù)式接口

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

概述

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

接口作用
Function程序中映射邏輯的抽象
Predicate程序中判斷邏輯的抽象
Consumer程序中的消費型邏輯的抽象
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;
        // 測試字符串的長度是否>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接口,又叫消費接口,沒有返回值,就像把輸入消費掉了一樣。

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接口,又叫生產(chǎn)接口,可以自定義返回值,用來生產(chǎn)一些東西。

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

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

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

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

x->y->x+y

假設(shè)輸入的為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));

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

相關(guān)文章

  • 詳解Java?redis中緩存穿透?緩存擊穿?雪崩三種現(xiàn)象以及解決方法

    詳解Java?redis中緩存穿透?緩存擊穿?雪崩三種現(xiàn)象以及解決方法

    緩存穿透是指緩存和數(shù)據(jù)庫中都沒有的數(shù)據(jù),而用戶不斷發(fā)起請求,如發(fā)起為id為“-1”的數(shù)據(jù)或id為特別大不存在的數(shù)據(jù)。這時的用戶很可能是攻擊者,攻擊會導(dǎo)致數(shù)據(jù)庫壓力過大
    2022-01-01
  • 基于Springboot+Junit+Mockito做單元測試的示例

    基于Springboot+Junit+Mockito做單元測試的示例

    本篇文章主要介紹了基于Springboot+Junit+Mockito做單元測試的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • java迭代器基礎(chǔ)知識點總結(jié)

    java迭代器基礎(chǔ)知識點總結(jié)

    在本篇內(nèi)容里小編給大家整理了一篇關(guān)于java迭代器基礎(chǔ)知識點總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-01-01
  • 5種java排序算法匯總工具類

    5種java排序算法匯總工具類

    這篇文章主要總結(jié)了java的快速排序,希爾排序,插入排序,堆排序,歸并排序五種排序算法,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java中ExecutorService和ThreadPoolExecutor運行原理

    Java中ExecutorService和ThreadPoolExecutor運行原理

    本文主要介紹了Java中ExecutorService和ThreadPoolExecutor運行原理,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot/Spring?AOP默認動態(tài)代理方式實例詳解

    SpringBoot/Spring?AOP默認動態(tài)代理方式實例詳解

    這篇文章主要給大家介紹了關(guān)于SpringBoot/Spring?AOP默認動態(tài)代理方式的相關(guān)資料,Spring AOP是一款基于Java的AOP框架,其中默認采用動態(tài)代理方式實現(xiàn)AOP功能,本文將詳細介紹動態(tài)代理的實現(xiàn)原理和使用方法,需要的朋友可以參考下
    2023-03-03
  • Spring JDK動態(tài)代理實現(xiàn)過程詳解

    Spring JDK動態(tài)代理實現(xiàn)過程詳解

    這篇文章主要介紹了Spring JDK動態(tài)代理實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java算法實現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解

    Java算法實現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解

    今天小編就為大家分享一篇關(guān)于Java算法實現(xiàn)調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)之前的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Springboot?引入?Redis?并配置序列化并封裝RedisTemplate?

    Springboot?引入?Redis?并配置序列化并封裝RedisTemplate?

    這篇文章主要介紹了Springboot?引入?Redis?并配置序列化并封裝RedisTemplate。文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Java多線程實現(xiàn)復(fù)制文件

    Java多線程實現(xiàn)復(fù)制文件

    這篇文章主要為大家詳細介紹了Java多線程實現(xiàn)復(fù)制文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論