隨著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就是為了減少代碼量,只不過我們需要記新的格式,提升編碼效率
閱讀更多 來杯Java提提神 的文章