輕鬆理解Lambda表達式(推導過程)


一、簡介

  • Lambda 表達式,也可稱爲閉包,它是推動 Java 8 發佈的最重要新特性。

  • Lambda 允許把函數作爲一個方法的參數(函數作爲參數傳遞進方法中)。

  • 使用 Lambda 表達式可以使代碼變的更加簡潔緊湊。

    Lambda表達式的重要特徵:

  • 可選類型聲明: 不需要聲明參數類型,編譯器可以統一識別參數值。

  • 可選的參數圓括號: 一個參數無需定義圓括號,但多個參數需要定義圓括號。

  • 可選的大括號: 如果主體包含了一個語句,就不需要使用大括號。

  • 可選的返回關鍵字: 如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定明表達式返回了一個數值。

二、具體使用(推導過程)

1、外部類調用

interface IInterest {
    int lambda(int a, int c);
}

//外部類
class Interest implements IInterest {
    @Override
    public int lambda(int a, int c) {
        System.out.println("外部類調用-->" + (a + c));
        return 0;
    }
}

public static void main(String[] args) {
//        外部類調用
    Interest interest1 = new Interest();
    interest1.lambda(200, 200);
  
}

2、內部類調用

內部類調用

//  內部類調用
class Interest2 implements IInterest {
    @Override
    public int lambda(int a, int c) {
        System.out.println("內部類調用-->" + (a + c));
        return (a + c);
    }
}
Interest2 interest2 = new Interest2();
interest2.lambda(300,300);

匿名內部類調用

//	匿名內部類調用
IInterest interest3 = new IInterest() {
    @Override
    public int lambda(int a, int c) {
        System.out.println("匿名內部類調用-->" + (a + c));
        return (a + c);
    }
};

interest3.lambda(44, 44);

3、Lambda表達式

Lambda簡化1

//  Lambda簡化1
IInterest interest = (int a, int c) -> {
    System.out.println("Lambda表達式調用-->" + (a + c));
    return (a + c);
};
interest.lambda(100, 200);

Lambda簡化2

//  Lambda簡化2
interest = (a, c) -> {
    System.out.println("Lambda表達式調用-->" + (a + c));
    return (a + c);
};
interest.lambda(200, 200);

Lambda簡化3

//  Lambda簡化3
interest = (a, c) -> {
    System.out.println("Lambda表達式調用-->" + (a + c));
    return a + c;
};
interest.lambda(100, 100);

Lambda簡化4

//  Lambda簡化4
interest = (a, c) -> a + c;
interest.lambda(50, 50);

4、開啓新的線程(最常使用)

//開啓新的線程
public static void main(String[] args) {
    new Thread(() -> {
        for (int i = 0; i < 100; i++) {
            System.out.println("一邊學習lambda");
        }
    }).start();
}

三、完整代碼

package com.ms.test;

/**
 * lambda推導 +參數+返回值
 */
public class LambdaTest {
    public static void main(String[] args) {
//        外部類調用
        Interest interest1 = new Interest();
        interest1.lambda(200, 200);

//        內部類調用
        class Interest1 implements IInterest {
            @Override
            public int lambda(int a, int c) {
                System.out.println("內部類調用-->" + (a + c));
                return (a + c);
            }
        }
        
//      匿名內部類調用
        IInterest interest3 = new IInterest() {
            @Override
            public int lambda(int a, int c) {
                System.out.println("匿名內部類調用-->" + (a + c));
                return (a + c);
            }
        };
        interest3.lambda(44, 44);
        
//        Lambda簡化1
        IInterest interest = (int a, int c) -> {
            System.out.println("Lambda表達式調用-->" + (a + c));
            return (a + c);
        };
        interest.lambda(100, 200);

//        Lambda簡化2
        interest = (a, c) -> {
            System.out.println("Lambda表達式調用-->" + (a + c));
            return (a + c);
        };
        interest.lambda(200, 200);

//        Lambda簡化3
        interest = (a, c) -> {
            System.out.println("Lambda表達式調用-->" + (a + c));
            return a + c;
        };
        interest.lambda(100, 100);
//        Lambda簡化4
        interest = (a, c) -> a + c;
        interest.lambda(50, 50);

    }

}

interface IInterest {
    int lambda(int a, int c);
}

//外部類
class Interest implements IInterest {
    @Override
    public int lambda(int a, int c) {
        System.out.println("外部類調用-->" + (a + c));
        return 0;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章