Java8--Lambda表達式與函數式接口

函數式接口:

  • 如果接口中只有一個抽象方法(包括繼承的),則該接口是一個函數式接口。
  • 下面的SmartAdder 就不是函數式接口,因爲它有兩個add方法(繼承一個)
public interface Adder{
    int add(int a, int b);
}
public interface SmartAdder extends Adder{
    int add(double a, double b);
}
  • 還可以使用FunctionalInterface註解來限定接口內只能有一個抽象方法。
@FunctionalInterface
public interface FunctionalInterfaceTest {
	void print();
}

lambda表達式:只能使用函數式接口

  • 無參數,無返回值
public static void main(String[] args) {
		// 使用匿名內部類實現
		FunctionalInterfaceTest fit=new FunctionalInterfaceTest() {
			@Override
			public void print() {
				System.out.println("使用匿名內部類實現");
			}
		};
		fit.print();
	// 使用Lambda表達式實現
    // ():表示參數列表 
	// ->:連接符
	// {}:方法體
	FunctionalInterfaceTest fit1 = () -> {
		System.out.println("使用Lambda表達式實現");
	};
	fit1.print();
     // 如果方法體只有一句話,還可以省略大括號及一個分號
    FunctionalInterfaceTest fit2 = () -> System.out.println("使用更簡潔的Lambda表達式");
	fit2.print();
}	
  • 有一個參數,無返回值
   public static void main(String[] args) {
		// Lambda表達式有一個參數
		FunctionalInterfaceTest fit3 = (x) -> {
			System.out.println("一個參數:"+x);
		};
		fit3.print(12);
		// 如果只有一個參數可以省略圓括號,還可省略掉大括號
		FunctionalInterfaceTest fit4 = x -> System.out.println("一個參數更簡潔:"+x);
		fit4.print(22);
  }
  • 有兩個及以上參數,圓括號不可省略
  • 方法體有兩行及以上代碼時,大括號不可省略。
  • 有返回值
    public static void main(String[] args) {
		// Lambda表達式有返回值
		FunctionalInterfaceTest fit3 = (x,y) -> {
			return x+y;
		};
		int c = fit3.add(12,11);
		System.out.println(c);
     // 因爲方法體只有一條語句,可以省略大括號
     // 注意在省略大括號時,將return關鍵字一塊省略,如下
     // 對於有返回值的情況,大括號和return關鍵字是一塊出現一塊消失的。
     FunctionalInterfaceTest fit3 = (x,y) -> x+y;
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章