Lambda表達式

函數式接口

瞭解Lamda表達式,先了解函數式接口(Function interface)
函數式接口的定義java

有且僅有一個抽象方法的接口,就是函數式接口.
例如 Runnable接口:
@FunctionalInterface
public interface Runnable {
 public abstract void run();
}
@FunctionInterface 註解用來標識這是一個函數式接口(非必須), 當使用此註解時,接口中添加了多抽象方法時就會報紅.
lambda表達式示例
函數式接口
@FunctionalInterface
public interface TestFunctionInterface {
 void max(int i);
}
匿名內部類和Lambda表達式比較
@Test
public void test1(){
 //匿名內部類
 TestFunctionInterface t1 = new TestFunctionInterface() {
 @Override
 public void max(int i) {
 System.out.println("t1輸出 :"+i);
        }
 };
    // Lambda表達式
 TestFunctionInterface t2 = (int i)->System.out.println("t2輸出:" + i);
 TestFunctionInterface t3 = (int i)->{System.out.println("t3輸出:" + i);};
    t1.max(20); //t1輸出 :20 
    t2.max(20); //t2輸出:20
    t3.max(20); //t3輸出:20
}
當Lambda表達式方法體只有一句時能夠省略大括號不寫
TestFunctionInterface t2=(int i)->
        ++i; System.out.println("t2輸出:" + i);
 /* 
 此時即便兩句在一行,可是依舊會報找不到i的錯誤. 
 java中一個分號(;)表示一句話的結束, 
 就會斷定System.out.println("t2輸出:"+i);語句已經不在Lambda表達式的做用域內 
下面加上大括號表示做用域之後就能夠正常進行運算輸出
 */
 TestFunctionInterface t2=(int i)->{
    ++i;
    System.out.println("t2輸出:" + i);
};
到這發現Lambda比傳統匿名內部類簡潔了許多,可是還沒完.
繼續簡化參數類型和參數括號
@Test
public void test5(){
    TestFunctionInterface t5=(i,j)->
        System.out.println("t5輸出:"+i*j);
    t5.max(20,10); //t5輸出:200
}
/* 當函數式接口的抽象方法只有一個參數時, 又能夠將參數外面的括號省略不寫*/
@Test
public void test6(){
    TestFunctionInterface t6= i ->
        System.out.println("t6輸出:"+i);
    t6.max(20); //t6輸出:20
}

寫出簡潔代碼的代碼 要從娃娃抓起.ide

相關文章
相關標籤/搜索