欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用

 更新時(shí)間:2021年10月08日 11:53:07   作者:葉綠體不忘呼吸  
Java 8 (又稱為 jdk 1.8) 是 Java 語(yǔ)言開(kāi)發(fā)的一個(gè)主要版本。 Oracle 公司于 2014 年 3 月 18 日發(fā)布 Java 8 ,它支持函數(shù)式編程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等

函數(shù)式接口概述

只包含一個(gè)抽象方法的接口,稱為函數(shù)式接口。

可以通過(guò) Lambda 表達(dá)式來(lái)創(chuàng)建該接口的對(duì)象。

可以在一個(gè)接口上使用 @FunctionalInterface 注解,這樣做可以檢查它是否是一個(gè)函數(shù)式接口。同時(shí) javadoc 也會(huì)包含一條聲明,說(shuō)明這個(gè)接口是一個(gè)函數(shù)式接口。

在java.util.function包下定義了Java 8 的豐富的函數(shù)式接口。

在函數(shù)式編程語(yǔ)言當(dāng)中,函數(shù)被當(dāng)做一等公民對(duì)待。在將函數(shù)作為一等公民的編程語(yǔ)言中,Lambda表達(dá)式的類(lèi)型是函數(shù)。但是在Java8中,有所不同。在Java8中,Lambda表達(dá)式是對(duì)象,而不是函數(shù),它們必須依附于一類(lèi)特別的對(duì)象類(lèi)型——函數(shù)式接口。

簡(jiǎn)單的說(shuō),在Java8中,Lambda表達(dá)式就是一個(gè)函數(shù)式接口的實(shí)例。這就是Lambda表達(dá)式和函數(shù)式接口的關(guān)系。也就是說(shuō),只要一個(gè)對(duì)象是函數(shù)式接口的實(shí)例,那么該對(duì)象就可以用Lambda表達(dá)式來(lái)表示。所以用匿名實(shí)現(xiàn)類(lèi)表示的現(xiàn)在都可以用Lambda表達(dá)式來(lái)寫(xiě)。

函數(shù)式接口示例

1、Runnable接口

在這里插入圖片描述

2、自定義函數(shù)式接口

@FunctionalInterface
public interface MyFunctional01{
    public String getValue();
}

//使用泛型
@FunctionalInterface
public interface MyFunctional02<T>{
    public T getValue(T t);
}

3、作為參數(shù)傳遞 Lambda 表達(dá)式

public class LambdaTest {
    public static void main(String[] args) {
        String newStr = toUpperString(str -> str.toUpperCase(),"abcDEf");
        System.out.println(newStr);
    }
    public static String toUpperString(MyFunc<String> my,String str){
        return my.getValue(str);
    }
}

@FunctionalInterface
interface MyFunc<T>{
    public T getValue(T t);
}

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

在這里插入圖片描述

import java.util.function.Consumer;

/**
 * @Author: Yeman
 * @Date: 2021-10-03-22:50
 * @Description:
 */
public class LambdaTest {
    public static void main(String[] args) {
        Consumer<Integer> consumer = i -> System.out.println(i);
        consumer.accept(9);
    }
}

在這里插入圖片描述

Lambda簡(jiǎn)述

Lambda 是一個(gè)匿名函數(shù),我們可以把 Lambda 表達(dá)式理解為是一段可以傳遞的代碼(將代碼像數(shù)據(jù)一樣進(jìn)行傳遞)。使用它可以寫(xiě)出更簡(jiǎn)潔、更靈活的代碼。作為一種更緊湊的代碼風(fēng)格,使Java的語(yǔ)言表達(dá)能力得到了提升。

其本質(zhì)是作為函數(shù)式接口(只有一個(gè)抽象方法)的實(shí)例。

Lambda 表達(dá)式:在Java 8 語(yǔ)言中引入的一種新的語(yǔ)法元素和操作符。這個(gè)操作符為 “->” , 該操作符被稱為 Lambda 操作符或箭頭操作符。它將 Lambda 分為兩個(gè)部分:
①左側(cè):指定了 Lambda 表達(dá)式需要的參數(shù)列表。
②右側(cè):指定了 Lambda 體,是抽象方法的方法體。

Lambda語(yǔ)法

1、無(wú)參,無(wú)返回值

public class LambdaTest {
    public static void main(String[] args) {
        //未使用Lambda表達(dá)式
        Runnable runnable1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("這是第一個(gè)語(yǔ)法!");
            }
        };
        runnable1.run();
        System.out.println("======================");
        //使用Lambda表達(dá)式
        Runnable runnable2 = () -> {
            System.out.println("這是用了Lambda表達(dá)式的一個(gè)語(yǔ)法!");
        };
        runnable2.run();
    }
}

2、一個(gè)參數(shù),無(wú)返回值

在這里插入圖片描述


3、數(shù)據(jù)類(lèi)型可以省略,因?yàn)榭捎删幾g器推斷得出,稱為“類(lèi)型推斷”

在這里插入圖片描述


4、Lambda 若只需要一個(gè)參數(shù)時(shí),參數(shù)的小括號(hào)可以省略

在這里插入圖片描述


5、Lambda 需要兩個(gè)或以上的參數(shù),多條執(zhí)行語(yǔ)句,并且可以有返回值

在這里插入圖片描述


6、當(dāng) Lambda 體只有一條語(yǔ)句時(shí),return 與大括號(hào)若有,都可以省略

在這里插入圖片描述

方法引用

當(dāng)要傳遞給Lambda體的操作,已經(jīng)有實(shí)現(xiàn)的方法了,可以使用方法引用。

方法引用可以看做是Lambda表達(dá)式深層次的表達(dá)。換句話說(shuō),方法引用就是Lambda表達(dá)式,也就是函數(shù)式接口的一個(gè)實(shí)例,通過(guò)方法的名字來(lái)指向一個(gè)方法,可以認(rèn)為是Lambda表達(dá)式的一個(gè)語(yǔ)法糖。

要求:實(shí)現(xiàn)接口的抽象方法的參數(shù)列表和返回值類(lèi)型,必須與方法引用的方法的參數(shù)列表和返回值類(lèi)型保持一致。

格式:使用操作符 “::” 將類(lèi)(或?qū)ο?與方法名分隔開(kāi)。

如下三種主要使用情況:
對(duì)象::非靜態(tài)方法名
類(lèi)::靜態(tài)方法名
類(lèi)::非靜態(tài)方法名

示例:

import java.util.Comparator;
import java.util.function.Consumer;

/**
 * @Author: Yeman
 * @Date: 2021-10-03-22:50
 * @Description:
 */
public class LambdaTest {
    public static void main(String[] args) {

        Consumer<Integer> consumer = i -> System.out.println(i);
        consumer.accept(9);

        Consumer<String> stringConsumer = System.out :: println;
        stringConsumer.accept("Hello");

        Comparator<Integer> comparable = (x, y) -> Integer.compare(x,y);
        System.out.println(comparable.compare(2,9));

        Comparator<Integer> integerComparator = Integer :: compare;
        System.out.println(integerComparator.compare(9,2));
    }
}

構(gòu)造器引用

格式:ClassName::new

與函數(shù)式接口相結(jié)合,自動(dòng)與函數(shù)式接口中方法兼容??梢园褬?gòu)造器引用賦值給定義的方法,要求構(gòu)造器參數(shù)列表要與接口中抽象方法的參數(shù)列表一致,且方法的返回值即為構(gòu)造器對(duì)應(yīng)類(lèi)的對(duì)象。

在這里插入圖片描述

數(shù)組引用

可以將數(shù)組看作一個(gè)類(lèi),則數(shù)組引用就類(lèi)似于構(gòu)造器引用。

格式:type[] :: new

import java.util.function.Function;

/**
 * @Author: Yeman
 * @Date: 2021-10-03-22:50
 * @Description:
 */
public class LambdaTest {
    public static void main(String[] args) {
        Function<Integer,String[]> function = length -> new String[length];
        String[] apply = function.apply(3);
        System.out.println(apply[2]);

        System.out.println("================");

        Function<Integer,String[]> function1 = String[] :: new;
        System.out.println(function1.apply(5));
    }
}

到此這篇關(guān)于一文帶你掌握J(rèn)ava8中Lambda表達(dá)式 函數(shù)式接口及方法構(gòu)造器數(shù)組的引用的文章就介紹到這了,更多相關(guān)Java Lambda表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Servlet和Filter之間的區(qū)別與聯(lián)系

    Servlet和Filter之間的區(qū)別與聯(lián)系

    這篇文章主要介紹了Servlet和Filter之間的區(qū)別與聯(lián)系的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • Java日志框架之logback使用詳解

    Java日志框架之logback使用詳解

    這篇文章主要介紹了Java日志框架之logback使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java利用POI實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel表格

    Java利用POI實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel表格

    這篇文章主要為大家詳細(xì)介紹了Java利用POI實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel表格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 使用SpringMVC接收文件流上傳和表單參數(shù)

    使用SpringMVC接收文件流上傳和表單參數(shù)

    這篇文章主要介紹了使用SpringMVC接收文件流上傳和表單參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java中輸出pdf文件代碼分享

    java中輸出pdf文件代碼分享

    這篇文章主要介紹了java中輸出pdf文件代碼分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-03-03
  • Java(TM) Platform SE binary 打開(kāi)jar文件的操作

    Java(TM) Platform SE binary 打開(kāi)jar文件的操作

    這篇文章主要介紹了Java(TM) Platform SE binary 打開(kāi)jar文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼代碼示例

    java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼代碼示例

    這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼的相關(guān)資料,最近需要一個(gè)密碼強(qiáng)度正則表達(dá)式在用戶注冊(cè)時(shí)校驗(yàn)用戶密碼強(qiáng)度,需要的朋友可以參考下
    2023-08-08
  • Java中Comparable和Comparator兩種比較器的區(qū)別詳解

    Java中Comparable和Comparator兩種比較器的區(qū)別詳解

    這篇文章主要介紹了Java中Comparable和Comparator兩種比較器的區(qū)別詳解,Comparable接口將比較代碼嵌入自身類(lèi)中,像Integer、String等這些基本類(lèi)型的JAVA封裝類(lèi)都已經(jīng)實(shí)現(xiàn)了Comparable接口,這些類(lèi)對(duì)象本身就支持和自己比較,需要的朋友可以參考下
    2023-09-09
  • 詳解springcloud組件consul服務(wù)治理

    詳解springcloud組件consul服務(wù)治理

    Consul是一款由HashiCorp公司開(kāi)源的,用于服務(wù)治理的軟件,Spring Cloud Consul對(duì)其進(jìn)行了封裝,這篇文章主要介紹了springcloud組件consul服務(wù)治理,需要的朋友可以參考下
    2022-08-08
  • Spring?boot?整合?Redisson實(shí)現(xiàn)分布式鎖并驗(yàn)證功能

    Spring?boot?整合?Redisson實(shí)現(xiàn)分布式鎖并驗(yàn)證功能

    這篇文章主要介紹了Spring?boot?整合?Redisson實(shí)現(xiàn)分布式鎖并驗(yàn)證,redisson是官方推薦的分布式鎖實(shí)現(xiàn)方案,采用redis自身的原子命令和lua腳本來(lái)實(shí)現(xiàn),需要的朋友可以參考下
    2022-05-05

最新評(píng)論