個人筆記之Lambda
Java 8 中提供了lambda表達式的寫法,使用lambda表達式能大大減少重複的代碼的出現率,能提高代碼運作效率,無形中還提高了編寫代碼的滿足感。
其實就是用内部方法直接重寫需要的方法,不需要再添加到代碼中。
其實是為了程式員減少壓力(偷懶)使用的一種規範(初級)
進階是為了釋放記憶體,減少記憶體壓力
初級文法:
(參數清單)->{要重寫的方法;};
進階文法:
A a = p::print;
四大内置函數式接口:
函數式接口:接口中有且僅有一個方法等待實作,用@FunctionalInterface來辨別
可以了解為,實作該接口時就是直接把該接口内自帶的(僅有一個的)方法映射為一個已經寫好的指定方法,
-
Consumer:
消費型接口,傳入一個參數,無傳回值。内置方法為accept()
例:public interface Consumer<T> { void accept(T t); }
String str = "123"; //表示此時Consumer函數式接口中的唯一的方法等價于System.out中的println方法 Consumer c = System.out::println; c.accept(str);
- Supplier:供給型接口,傳入一個參數,傳回一個指定類型的傳回值。内置方法為get()
public interface Supplier<T> { T get(); }
- Function:功能型接口,傳入兩個參數,傳回一個指定類型的結果
public interface Function<T, R> { R apply(T t); }
- Predicate:斷言型接口,傳入一個參數,傳回一個布爾類型的值
public interface Predicate<T> { boolean test(T t); }
status:
了解了但是不熟
稍微熟悉一點了,日常運用可以了
低級:()->{}參數帶方法,直接寫方法
進階:
::
直接引用,例:打個招呼,翻譯,就跟他一樣!
例:System.out::print;
翻譯:該方法用法參照System.out中的print方法,隻要用這個語句代替了的函數,其中唯一的那個函數
都會被當做print方法使用
優點:不用寫重複的代碼和方法,也無需從别的地方調用,直接用函數接口借用已經寫好的方法,省時省力,還能節省資源空間(這就是代碼調優吧)
缺點:一個lambda隻能實作一個方法,如果需要用某個類中的多個方法的話還是老老實實重寫或者調用比較實在。