Java8中的Lambda表示式
阿新 • • 發佈:2019-01-27
一.簡述
Lambda表示式本是屬於JDK1.7的Lambda專案的內容.在JDK1.7開發琪琪,Sun公司由於相繼在技術競爭和商業競爭中都深陷泥潭,公司的股票市值跌至僅有高峰時期的3%,已無力推動JDK1.7的研發工作按正常進行.為了儘快結束JDK1.7長期"跳票"的問題,Oracle公司收購Sun公司後不就便宣佈將實行"Plan B","Plan B"把不能按時完成的Lambda專案,Jigsaw專案和Coin專案的部分改進延遲到JDK1.8之中(更多詳細的請見Java發展史).所以Lambda的功能才在JDK1.8中釋出. Lambda表示式基於數學中的λ演算得名,但是和λ演算的關係又相差甚遠.有點像原子彈和質能方程的關係,差別其實還是挺大的. 什麼的Lambda表示式呢? 簡答來說Lambda表示式就是匿名方法. 匿名方法的概念類似於Anonymous類的不同之處在於它實現了一個函式式介面. 函式式介面是Java8中的新介面概念.函式式介面只能宣告一個抽象方法. 函式式介面詳細見:
Lambda表示式執行程式設計師以簡潔的方式傳遞程式碼,從而使程式碼更加的簡潔.
二. Lambda表示式語法
Lambda表示式包含:
a.引數列表
b.剪頭符號(->)
c.正文的Lambda語句
Lambda表示式的語法:
(引數)->{正文語句;}
三.Lambda表示式的使用
1.lambda表示式可以有零個或多個引數
例1:
() -> {System.out.println("Hello World");}
例2:
// 接收兩個int型的x,y,返回他們的和
(int x, int y) -> {return x+y;}
2.如果引數的型別可以由編譯器決定,那麼我們可以忽略在lambda表示式中新增它們。
例1:
(int x, int y) -> {return x+y;} // 帶有引數型別
(x,y) -> {return x+y;}; // 忽略引數型別
3.如果只有一個引數。引數的括號可以省略
例1:
x -> {return x+10;}
String s -> System.out.println(s)
4.如果body只有一個表示式,那麼return關鍵字和大括號可以省略
(int x, int y) -> x + y
如果省略返回型別的引數,則編譯器將確定預設引數型別。
5.Lambda可以有空引數和空正文語句
例1:
() -> {return “Hello World”;} // 空引數
()->{} // 空引數以及空體
四.呼叫Lambda表示式
Lambda表示式就像一個方法一樣被呼叫和執行.
對於呼叫Lambda表示式,我們應該建立一個函式式介面.
例1:
public class MyFuntionalInterface {
interface MyInterface{
void hello();
}
public static void main(String[] args) {
MyInterface infVar = () -> {System.out.println("Hello World");};
infVar.hello();
}
}
五.總結
結合函式式介面章節閱讀學習
說個題外話,看到有人說java的Lambda表示式落後C# 8年才出現,並不是java語言落後所致,而是Sun公司的衰落而至.