lambda結合函式式介面使用,函式式介面(functional inte***ce)就是乙個有且僅有乙個抽象方法,但是可以有多個非抽象方法的介面。
1 可選型別宣告
不需要宣告引數型別,即直接可以寫引數,不需要宣告型別,編譯器可以自動識別型別
2 可選的引數圓括號
乙個引數可以不要圓括號,多個引數需要圓括號
3 可選的大括號
在實現方法中,主體如果只有乙個語句,可以不用寫大括號,類似於if…else…的,可以不用寫大括號
4 可選的返回關鍵字
如果主體返回值只有乙個表示式,編譯器會自動變異返回值,大括號能可以指明返回的型別
1 省略引數型別,返回值為5
() -> 5
2 省略引數型別,返回值用到引數
(x) -> 2*x
3 新增引數型別
(int x,int y)-> x+y
4 返回值可以為void
(string str) -> system.out.print(str)
package com.fxs.lambda;
public class test ;
system.out.println(test31.count(2,3));
//可以沒有返回值
test4 test4 = (s)-> system.out.println(s);
test4.count("測試無返回值"); }
}//函式式介面,有且只有乙個抽象方法
@functionalinte***ce
inte***ce test1
inte***ce test2
inte***ce test3
inte***ce test4
lambda 表示式只能引用標記了 final 的外層區域性變數,這就是說不能在 lambda 內部修改定義在域外的區域性變數,否則會編譯錯誤。
inte***ce test5
//變數域 ,注意點1
final int num =1;
test5 test5 = (x) -> x + num;
system.out.println(test5.count(2));
//num = 2; //把注釋放開會報錯,因為lambda表示式中用到num,如果num做修改,test5的實現類就不明確,編譯錯誤,必須定義為final
//變數域,注意點2
int num1 =1;
test5 test51 = (x) -> x + num1;
system.out.println(test5.count(2));
//num1 = 2;//lambda 表示式的區域性變數可以不用宣告為 final,但是必須不可被後面的**修改(即隱性的具有 final 的語義)
//lambda 表示式的區域性變數可以不用宣告為 final,但是必須不可被後面的**修改(即隱性的具有 final 的語義)
//變數域,注意點3
//string str="變數名不可重複";//注釋放開會報錯,因為區域性變數str和lambda中的引數名str一樣會報錯
test4 test4 = (str) -> system.out.println(str);
菜鳥教程資料 Java8 新特性 方法引用 一
package cn.com.zq.demo03.reference.test03.reference 方法引用 練習 使用系統已經存在的 方法 進行引用 為什麼要有方法引用?主要是對lambda表示式的優化 當 中 已經存在 對應的類 對應的物件 對應的this 對應的super 的時候 我們可以...
JAVA8新特性Stream學習中
stream是資料渠道,用於運算元據源 集合,陣列等 所生成的元素序列。集合講的是資料,流講的是計算 注 stream自己不會儲存元素 stream不會改變源物件。相反,他們會返回乙個持有結果的新的stream stream操作是延遲執行的。這意味著他們會等到需要結果的時候才執行。步驟 建立stre...
java8新特性之介面定義增強
一 介面定義的增強 從jdk1.8開始允許在介面中定義普通方法,使用default和static關鍵字,跟在訪問修飾符之後,兩種的區別是,default定義的普通方法用物件呼叫,static定義的方法用介面名呼叫 inte ce ibook static void study class booki...