Java8新特性中的Lambda,沒那麼難

隨著Java8越來越多的使用,掌握Lambda就成了程序員必備技能之一。

廢話不多說,直接上乾貨。

Lambda的作用

最簡單的來說,就是減少代碼量

主要是由於想要調用接口方法的時候,必須對接口的方法進行實現,然而這個實現大多數代碼都是無用的,用戶體驗很不好,於是java8推出了Lambda簡化接口方法的實現。可以看下邊,不使用Lambda和使用了Lambda,在代碼量上的差別

//不使用Lambda表達式時,用了5行代碼

Consumer<string> con1=new Consumer<string>() {/<string>/<string>

@Override

public void accept(String s) {

System.out.println(s);

}

};

//使用Lambda時,只用了1行代碼

Consumer<string> con2=(s) -> System.out.println(s);/<string>

Lambda格式

(參數)->{要執行的代碼}

->,將表達式分為兩部分

左側,接口中方法的參數列表

右側,Lambda體,寫所需要執行的功能

語法格式1:無參,無返回值

() ->{System.out.println("Hello Lambda")}

語法格式2,一個參數,無返回值

Consumer<string> con =(x) ->System.out.println("Hello Lambda")/<string>

語法格式3.一個參數,無返回值,小括號可以不寫

Consumer<string> con =x ->System.out.println("Hello Lambda")/<string>

語法格式4,兩個參數,並且Lambda體中有多條語句,有返回值

Comparator<interger> = (x,y) ->{/<interger>

System.out.println("Hello Lambda";

return Integer.compare(x,y);

}

語法格式5,Lambda體中只有一條語句,return 和大括號都可以不寫

Comparator<interger> = (x,y) ->Integer.compare(x,y);/<interger>

語法格式6,參數的數據類型可寫,也可以不寫(因為jvm編譯器通過上下文推斷出數據類型,即類型推斷)

Comparator<interger> = (Integer x,Integer y) ->Integer.compare(x,y);/<interger>

額外:1.7之前局部變量,想在局部內部類中使用,改變量必須是final修飾的,現在雖然不用加final,但是在局部內部類中還是不能修改這個變量如,a++操作

final Integer a=0;

//1.8以前局部變量要加final,才能在局部內部類中使用

Consumer<integer> con1=new Consumer<integer>() {/<integer>/<integer>

@Override

public void accept(Integer i) {

System.out.println(a);

}

};

Integer a2=0;

//1.8後局部變量不加final,也可以在局部內部類中使用,但是不能修改,比如a2++就是錯的

Consumer<integer> con2=(i) -> System.out.println(a2);/<integer>

總結:Lambda就是為了減少代碼量,只不過我們需要記新的格式,提升編碼效率


分享到:


相關文章: