溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何理解Java中的lambda表達(dá)式

發(fā)布時間:2022-06-02 14:15:36 來源:億速云 閱讀:131 作者:iii 欄目:編程語言

這篇文章主要介紹了如何理解Java中的lambda表達(dá)式的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何理解Java中的lambda表達(dá)式文章都會有所收獲,下面我們一起來看看吧。

如何理解Java中的lambda表達(dá)式


Lambda概述

Lambda表達(dá)式是JDK8開始后的一種新語法形式

作用:簡化匿名內(nèi)部類的代碼寫法

格式:

(匿名內(nèi)部類被重寫方法的形參列表)->{
    被重寫方法的方法體代碼
}
注:->是語法形式,無實(shí)際意義

首先我們先定義一個抽象類,通過匿名內(nèi)部類重寫其方法,再對其進(jìn)行簡化,比較二者之間有何變化:

使用Lambda表達(dá)式之前:

public static void main (String[] args){
    People p = new People(){
    @Override
    public void run(){
        System.out.println("小學(xué)生跑的很慢");
        }
    };
    p.run();    

}
abstract class People{
    public abstract void run();
}

使用Lambda表達(dá)式之后:

People p = ()->{
    System.out.println("小學(xué)生跑的很慢");
};
//會出現(xiàn)報(bào)錯

會出現(xiàn)報(bào)錯,這是為什么呢?原因在于前面對于Lambda表達(dá)式的定義并不清晰,Lambda表達(dá)式并不能簡化所有匿名內(nèi)部類,其只能簡化函數(shù)式接口匿名內(nèi)部類的寫法形式,且接口中有且僅有一個抽象方法,通常,我們會再接口上加上一個@Functionalinterface注解,標(biāo)記該接口必須是滿足函數(shù)式接口。

真正意義上通過Lambda表達(dá)式簡化:

@FunctionalInterface//加上這個注解必須是函數(shù)式接口,且只有一個抽象方法
interface People{
    void run();
}
//簡化之前的匿名內(nèi)部類
People p = new People(){
    @Override
    public void run(){
        System.out.println("小學(xué)生跑的很慢!");
    }
};
//簡化之后
People p = () -> {
        System.out.println("小學(xué)生跑的很慢!");
};

另外,也可以將其作為參數(shù)代入方法中去使用:

//在原來的基礎(chǔ)上定義一個pk方法
public static void pk(People p){
    System.out.println("跑步情況如何:")
    p.run();
}
//不使用Lambda的情況下:
pk(p);//需要在定義匿名內(nèi)部類之后,將p代入;
//使用Lambda的情況:
People p = () -> {
        System.out.println("小學(xué)生跑的很慢!");
};
pk(() -> {
        System.out.println("小學(xué)生跑的很慢!");
});
//由于等號右邊即是People創(chuàng)建的對象p,因此可以可以直接將其代入

Lambda的好處:

Lambda是一個匿名函數(shù),我們可以把Lambda表達(dá)式理解為是一段可以傳遞的代碼,它可以寫出更簡潔、更靈活的代碼,作為一種更緊湊的代碼風(fēng)格,使Java語言表達(dá)能力得到了提升。

Lambda實(shí)戰(zhàn)的作用

在之前的學(xué)習(xí)過程中,我們學(xué)習(xí)過了Arrays的相關(guān)知識,其中有一個sort方法(可以將數(shù)組升序或降序排列),它其實(shí)也是接口類,并且只有一個抽象方法:

//精簡之前:
Arrays.sort(grade,new Comparator<Integer>(){
    @Override
    public int compare(Integer o1,Integer o2){
        return o2 -o1;
}
});
//精簡之后:
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});

Lambda表達(dá)式省略規(guī)則

  • 參數(shù)類型可以省略不寫

//參考前面的實(shí)戰(zhàn)例子
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});
//省略參數(shù)類型之后
Arrays.sort(grade,( o1, o2){
        return o2 -o1;
});
  • 如果只有一個參數(shù),參數(shù)類型可以省略,同時()也可以省略

//簡單引用一個單個參數(shù)的例子,不需要了解其具體含義
btn.addActionListener((ActionEvent e) -> {
    System.out.println("我是簡單的例子。");
});
//簡化之后:
btn.addActionListener( e -> {
    System.out.println("我是簡單的例子。");
});
  • 如果Lambda表達(dá)式的方法體代碼只有一行代碼。可以省略大括號不寫,同時要省略分號

//參照上一條規(guī)則的例子
btn.addActionListener( e -> {
    System.out.println("我是簡單的例子。");
});
//簡化之后:
btn.addActionListener( e -> System.out.println("我是簡單的例子。") );
  • 如果Lambda表達(dá)式的方法體代碼只有一行代碼??梢允÷源罄ㄌ柌粚?。此時,如果這行代碼是return語句,必須省略return不寫,同時也必須省略";"不寫

//參照第一條規(guī)則的代碼
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});
//簡化之后:
Arrays.sort(grade,( o1, o2)-> o2 -o1);

關(guān)于“如何理解Java中的lambda表達(dá)式”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“如何理解Java中的lambda表達(dá)式”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI