基礎(chǔ)語法
Lambda需要函數(shù)式接口支持? 接口用@Functiona1Interface修飾随橘,就是函數(shù)式接口
Lambda操作接口(函數(shù)式接口:一個接口 就一個抽象方法)
Java 8引入了新的操作符“->”
該操作符把lambda拆分成兩部分
左側(cè)對應(yīng)表達式的參數(shù)列表(接口所需要的參數(shù),參數(shù)類型不需要寫,jvm會根據(jù)上下文推斷,如jdk7后List list = new ArrayList<>();)
右側(cè)表達式中所需要實現(xiàn)的功能(接口的實現(xiàn))
語法格式一:無參數(shù),無返回值
? ? ? ? ?() -> System.out.println("Hello Lambda!");
語法格式二:有一個參數(shù),并且無返回值
? ? ? ? ? (x) -> System.out.println(x)
語法格式三:若只有一個參數(shù),小括號可以省略不寫
? ? ? ? ? ?x -> System.out.println(x)
語法格式四:有兩個以上的參數(shù)窑滞,有返回值,并且Lambda體中有多條語句
? ? ? ? ? Comparator com = (x, y) -> {
? ? ? ? ? ? ? ? ? ? ? ? ?System.out.println("函數(shù)式接口");
? ? ? ? ? ? ? ? ? ?return Integer.compare(x, y);
? ? ? ? ? };
語法格式五:若Lambda體中只有一條語句,return和 大括號都可以省略不寫
? ? ? ? Comparator com = (x, y) -> Integer.compare(x, y);
語法格式六:Lambda表達式的參數(shù)列表的數(shù)據(jù)類型可以省略不寫葛假,因為JVM編譯器通過上下文推斷出障陶,數(shù)據(jù)類型,即“類型推斷”
? ? ? ?(Integer x, Integer y) -> Integer.compare(x, y);
JAVA8內(nèi)置四大核心函數(shù)式接口
1: Consumer消費型接口聊训;
Void ??accept(T t);
2: Supplier ?供給型接口
T ?????get();
3: Function ?函數(shù)式接口
R ?????apply(T t);
4 : Predicate(T)斷言型接口
Boolean test(T t);
核心函數(shù)只是體現(xiàn)接口抱究,實現(xiàn)自己所需要的功能,根據(jù)功能場景選擇函數(shù)接口带斑,
如需要返回值供給型(其他接口都是大同小異)
Lambda表達式引用
方法引用:
a)若Lambda體中的功能鼓寺,已經(jīng)有方法提供了實現(xiàn),可以使用方法引用勋磕,可以將方法引用理解為Lambda表達式的另外一種表現(xiàn)形式)
對象的引用::實例方法名調(diào)用類的getName()
Supplier sup2 = emp::getName;
String name = sup2.get();
類名::靜態(tài)方法名
類名::實例方法名
①方法引用所引用的方法的參數(shù)列表與返回值類型妈候,需要與函數(shù)式接口中抽象方法的參數(shù)列表和返回值類型保持一致!
②若Lambda的參數(shù)列表的第一個參數(shù)挂滓,是實例方法的調(diào)用者苦银,第二個參數(shù)(或無參)是實例方法的參數(shù)時,格式:ClassName::MethodName
構(gòu)造器引用
數(shù)組引用類型[] :: new
強大的Stream API
Stream是一個抽象流的概念 ,生成流后通過中間操作數(shù)據(jù)源(集合贝椿,數(shù)組)產(chǎn)生一個新的元素序列想括。就像SQL一樣
Stream是延遲執(zhí)行 需要數(shù)據(jù)才執(zhí)行,執(zhí)行效率非常非常高烙博。高效
獲取Stream
中間操作
對流進進行一些列操作瑟蜈,得到自己想要的流數(shù)據(jù),像SQL對數(shù)據(jù)進行 過濾 求和
得到想要的數(shù)據(jù)中間操作都返回流
映射map flatMap
排序
終止操作
當執(zhí)行終止操作,中間操作會一次性執(zhí)行冬阳,沒有執(zhí)行終止操作蛤虐,中間操作就是個擺設(shè)