1. 程式人生 > 實用技巧 >Lambda表示式(從程式碼理解定義)

Lambda表示式(從程式碼理解定義)

1、Lambda表示式

​ Lambda 表示式是一種匿名函式(對 Java 而言這並不完全正確,但現在姑且這麼認為),簡單地說,它是沒有宣告的方法,也即沒有訪問修飾符、返回值宣告和名字。

​ 你可以將其想做一種速記,在你需要使用某個方法的地方寫上它。當某個方法只使用一次,而且定義很簡短,使用這種速記替代之尤其有效,這樣,你就不必在類中費力寫宣告與方法了。

1.1基本方實現類法

首先看一下基礎的實現類,一般定義介面與實現介面的三種方法(一般實現類,靜態內部類,區域性內部類)。

package SunLambda;
//對介面實現類進行呼叫。
public class Lambda_01 {
    //靜態內部類
     static class ILike2 implements LambdaSun{
        @Override
        public void Lambda() {
            System.out.println("學習Lambda讓我快樂!2");
        }
    }
    public static void main(String[] args) {
        ILike iLike = new ILike();
        iLike.Lambda();
        ILike2 iLike2 = new ILike2();
        iLike2.Lambda();

        //區域性內部類
        class ILike3 implements LambdaSun{
            @Override
            public void Lambda() {
                System.out.println("學習Lambda讓我快樂!3");
            }
        }
        ILike3 iLike3 = new ILike3();
        iLike3.Lambda();
    }
}

//定義介面
interface LambdaSun{
    void Lambda();
}

//定義介面實現類
class ILike implements LambdaSun{
    @Override
    public void Lambda() {
        System.out.println("學習Lambda讓我快樂!");
    }
}

為什麼要用lambda?

使用lambda表示式可對一個介面進行簡潔的實現。

lambda對介面的要求

要求介面中定義的必須實現的抽象方法只能有一個(必須要實現的,不是default修飾的)。

1.2lambda簡化無參構造方法

package SunLambda;

public class Lambda_02 {


    public static void main(String[] args) {
        //匿名內部類,沒有類的名稱,必須藉助介面或者是父親
        LambdaSun1 lambda = new LambdaSun1() {
            @Override
            public void Lambda() {
                System.out.println("學習Lambda讓我快樂!5");
            }
        };
        lambda.Lambda();
        //用Lambda方法進行簡化

        LambdaSun1 lambd = () ->{
                System.out.println("學習Lambda讓我快樂!6");
        };
        lambd.Lambda();
        LambdaSun1 lambd1;

        //用Lambda方法進行簡化簡化2
        lambd1= ()-> System.out.println("學習Lambda讓我快樂!7");
        lambd1.Lambda();

    }

}
//定義介面
interface LambdaSun1{
    void Lambda();
}


Lambda實現介面,是有匿名內部類一步步實現的。

注:

1、Lambda表示式只有一行程式碼的情況下才能簡化為一行,多行的話必須使用程式碼塊(也就是{});

2、前提是介面是函式式介面;

3、介面多個引數型別可以去掉引數型別,要去掉都去掉,但必須加括號。

1.3Lambda簡化有引數方法

package SunLambda;

public class Lambda_03 {



    public static void main(String[] args) {
    //匿名內部類
        LambdaSun2 lambdasun = new LambdaSun2(){
            @Override
            public void lambda(int a,int b,int c) {
                System.out.println(a+b+c);
            }
        };
        lambdasun.lambda(1,1,1);
        LambdaSun2 lambda;
        //lambda簡化1
        lambda =(int a,int b,int c)->{
            System.out.println(a+b+c);
        };
        lambdasun.lambda(2,2,2);
        //lambda簡化2
        lambda =( a,b,c)->{
            System.out.println(a+b+c);
        };
        lambdasun.lambda(3,3,3);
        //lambda簡化3
        lambda=( a,b,c)-> System.out.println(a+b+c);
        lambdasun.lambda(4,4,4);
    }
}
interface LambdaSun2{
    void lambda(int a,int b,int c);
}

注:介面多個引數型別可以去掉引數型別,要去掉都去掉,但必須加括號。

自學習於嗶哩嗶哩狂神說JAVA(侵刪);

作為自己的筆記,歡迎大家斧正!