標籤:return語句 轉換 格式 fun value 組成 哈哈 system 類型轉換
Lambda 運算式 in Java 8
- Lambda運算式是java 8 新增的特性
- Lambda運算式主要作用:支援將代碼塊作為方法參數,允許使用更簡潔的代碼建立函數式介面的執行個體,是匿名內部類的一種簡化,可以部分取代匿名內部類的作用。
- 函數式介面:只有一個抽象方法的介面。
- Lambda運算式又稱為匿名函數(anonymous function),表示一類無需定義標識符(函數名)的函數或者子程式,可以看做是一種文法糖。
Lambda 運算式文法格式
Lambda運算式在java中由三部分組成:
- 形參列表:形參列表允許省略形參類型,如果形參列表只有一個參數,形參列表外的圓括弧也可以省略
- 箭頭->:箭頭不可省略
- 代碼塊:如果代碼塊只有一條語句,允許省略代碼塊的花括弧;更有甚者,只有一條return語句,可以省略return關鍵字。
interface Eatable{ void taste();}interface Flyable{ void fly(String weathrer);}interface Addable{ int add(int a,int b);}public class LambdaTest { public void eat(Eatable e) { e.taste(); System.out.println(e); } public void fly(Flyable f) { f.fly("好天氣"); System.out.println(f); } public void add(Addable a) { System.out.println(a.add(5, 3)); } public static void main(String[] args) { LambdaTest test = new LambdaTest(); test.eat(()->System.out.println("蘋果")); test.fly(weater->{ System.out.println("哈哈哈"); System.out.println("可以飛行"); }); // 省略形參類型 省略花括弧 test.add((a,b)->a+b); }}
函數式介面
- 函數式介面是指只包含一個抽象方法的介面,(可有其他預設方法(default修飾)或者類方法)java 8 中有大量的函數式介面如最常見的:Runnable,ActionListener,並提供了@FunctionInterface註解,告訴編譯器執行更嚴格的檢查。
Runnbale r =()->{ for(int i =0;i<100;i++){ System.out.println(i); }}; // 注意分號
- Lamdba 運算式的目標類型只能是函數式介面。
- Lambda 運算式常應用情境:
- 將Lambda運算式賦值給函數式介面類型的變數
- 作為函數介面類型的參數傳給某個方法
- 使用函數式介面對Lambda運算式進行強制類型轉換
Object obj = (Runnable)()->{ System.out.println(...);};
方法引用和構造器引用
- 應用情境:代碼塊只有一條語句,並且該語句為調用方法或者構造器
- 應用目的:使Lambda運算式的文法更為簡潔
- 應用方式:::
@FunctionalInterfaceinterface Converter{ Integer convert(String from);}// 類方法Converter con = from->Integer.valueOf(from);Converter con1 = Integer::valueOf;// 對象方法Converter con2 = from->"hhhh".indexOf(from);Converter con3 = "hhhh"::indexOf;// 構造器類似// ::new
Lambda運算式與匿名內部類的聯絡和區別
- Lambda運算式簡化了部分匿名內部類的寫法(函數式介面),表現性質和匿名內部類一致,可以訪問effective final局部變數,和外部類成員變數
- 匿名內部類的應用範圍更廣,它可以為任何介面建立執行個體,也可以服務於抽象類別和普通類
- 注意Lambda運算式的代碼塊不允許調用介面中定義的預設方法
Lambda 運算式 in java 8