一、簡介
-
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;
}
}