一篇文章學會使用Lambda表示式

努力的Daimon發表於2024-09-11
  • 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可以檢查該介面是否為函式式介面

相關文章