天天看點

一、JAVA8學習筆記 Lambda表達式快速入門

一、扯淡 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 …