lambda 是一個匿名函式,我們把lambda理解為一段可以傳遞的代碼,使java的語言表達能力得到提升
一.lambda的基礎語法 java8中引入了一個新的運算子 “->” 該運算子稱為箭頭運算子或lambda運算子 (對介面的實作?)
箭頭運算子將lambda運算式分為兩部分:
左側:lambda 運算式的引數串列
右側:lambda 運算式所需要執行的功能 lambda 體
語法格式一:無引數,無回傳值
()-> System.out.println("hello lambda") 例:(匿名內部類) Runnable r= new Runnable(){ public void run(){ System.out.println("hello lambda") } }
使用lambda運算式:
Runnable r= ()-> System.out.println("hello lambda")
例:(區域匿名內部類)
int num=0;//jdk1.7前 ,必須是final修飾
jdk1.8 默認為final
Runnable r= new Runnable(){ public void run(){ System.out.println("hello lambda" +num) } }
使用lambda運算式:
Runnable r= ()-> System.out.println("hello lambda"+num)
r.run();
語法格式二:有一個引數,無回傳值 (x)->System.out.println(x);
Consumer<String> con = (x)->System.out.println(x); con.accpet("hahah");
語法格式三:若只有一個引數,無回傳值 lambda運算式左側小括號可以不寫
x->System.out.println(x)
語法格式四:有兩個以上的引數,有回傳值 并且lambda體中有多條陳述句
Comparator<Integer> com = (x,y) ->{ System.out.println("函式式介面");
return Integer.compare(x,y); }
語法格式五:若lambda體只有一條陳述句 return 和大括號都可以省略不寫 (和語法四進行對比) Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
語法格式六:lambda運算式 引數串列的資料型別可以省略不寫,因為jvm編譯器可以通過背景關系推斷出資料型別,即"型別推斷"
型別推斷 例: String[] str={"aaa","bbb","ccc"} List<String> list= new ArrayList<>();
Comparator<Integer> com = (Integer x,Integer y) -> Integer.compare(x,y); (此處對比語法五)
總結:左右遇一括號省 左側推斷型別省 右側只有一條陳述句return也可以省略
二.lambda運算式 需要“函式式介面”的支持 函式式介面:介面中只有 一個抽象方法的介面,稱之為函式式介面。 可以使用注解@FunctionInterface 修飾 進而檢查是否為函式式介面
uj5u.com熱心網友回復:
感謝分享,建議寫成博客uj5u.com熱心網友回復:
只是個人總結,謝謝建議轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/109016.html
標籤:非技術版
上一篇:那位大神知道日立驅動器怎么設定
下一篇:華為超級大終端
