- Lambda表示式是Java8引入的一個重要特性
- Lambda表示式可以被視為匿名函式
- 允許在需要函式的地方以更簡潔的方式定義功能
1.定義三個介面(多個引數,單個引數,無引數)
interface MyInterface {
int sum(int i, int j);
}
interface MyHeHe {
int hehe(int i);
}
interface MyHaHa {
int haha();
}
2.通常我們需要自己寫實現類在方法中建立實現類物件,或者建立匿名實現類
class MyInterfaceImpl implements MyInterface {
@Override
public int sum(int i, int j) {
return i + j;
}
}
// 1.自己建立實現類物件
MyInterfaceImpl myInterface = new MyInterfaceImpl();
System.out.println(myInterface.sum(1, 2));
// 2.建立匿名實現類
MyInterface myInterface1 = new MyInterface() {
@Override
public int sum(int i, int j) {
return i + j;
}
};
System.out.println(myInterface1.sum(1, 2));
3.使用Lambda表示式
// 3.Lambda表示式 引數列表+箭頭+方法體
MyInterface myInterface2 = (int i, int j) -> {
return i + j;
};
System.out.println(myInterface2.sum(1, 2));
// 4.簡化寫法1:引數型別可以不寫,只寫引數名,且引數名可改變
MyInterface myInterface3 = (x, y) -> {
return x + y;
};
System.out.println(myInterface3.sum(1, 2));
// 5.簡化寫法2:當沒有引數時,可只寫()
MyHaHa myHaHa = () -> {
return 3;
};
System.out.println(myHaHa.haha());
// 6.簡化寫法3:當引數只有一個時,可省去()只寫引數名
MyHeHe myHeHe = i -> {
return i + 2;
};
System.out.println(myHeHe.hehe(1));
// 7.簡化寫法4:方法體如果只有一句話,{}也可以省略
MyHeHe myHeHe1 = i -> i+2;
System.out.println(myHeHe1.hehe(1));
4.補充說明
- 使用Lambda表示式可以簡化函式式介面(介面中有且只有一個未實現的方法,該介面就是函式式介面)
- 使用官方註解@FunctionalInterface可以檢查該介面是否為函式式介面