一、扯淡 Why Java8 Streams?
二、What is 函數式接口 ?
三、總結
為什麼要學習java8 流技術 、Lambda 表達式等 ?
一個很好的目的就是:
希望最簡單的并發執行你的程式,且避免用 Synchronized控制線程安全。
采用Stream技術,再也用不着去費勁搞Thread多線程了。
使用Java 8,你就是在保護你作為Java工程師的職業生涯 _
函數式接口的概念:隻定義一個抽象方法的接口
用函數式接口可以幹什麼呢? Lambda表達式最喜歡函數式接口!
舉例說明:定義一個隻有一個方法的接口,實作該接口列印字元串"Hello !"
第一步 定義接口
注解 @FunctionalInterface 的作用類似于 @Overried, 表示限制隻能有一個接口
第二步 實作接口
第三步 測試接口
第三步 換一種方式測試接口
如果采用Lambda表達式則可以不用定義實作類,直接一行代碼即可:
主要看操作符 “->” , 請不要把它看成類似于C++裡面的指針什麼的,
通俗講它就是一個分割符,分割函數參數部分和函數體部分。
整個 “() -> System.out.println(“Hello !”) ”這段代碼其實就是接口ShowMsg的匿名類執行個體對象。
針對其他類别的抽象方法的處理如下:
(1)如果接口方法是:void printMsg(String msg);
則 Lambda表達式:(msg) -> System.out.println(msg);
或者:msg -> System.out.println(msg); // 單個參數可以舍棄參數兩邊的”(”和”)” ,多個參數則必須有兩邊的”(”和”)”。
(2)如果接口方法是:String printMsg( );
則Lambda表達式:() -> “Hello !”; // 這裡無需 return 關鍵字
(3)如果函數體内語句多個則需要“{}”
Lambda表達式:() -> {String msg = “Hello !”; System.out.println(msg);};
函數式接口就是隻定義一個抽象方法的接口
Lambda表達式可直接作為一個函數式接口的匿名實作類對象(一個實實在在的Java實體對象)
沒有java8之前也有很多函數式接口:
Comparator 和 Runnable 都是耳熟能詳的老接口了。
沒有Lambda的年代采用匿名内部類:
看上去很笨拙
進入 Lambda 的時代:
是否讓你感覺很簡潔 ?
Over …