大家好,我是IT修真院成都分院第9期的JAVA學員楊以杰,一枚正直純潔善良的java程序員。
1.背景介紹
什么是lambda表達式
lambda表達式是JAVA8中提供的一種新的特性,它支持JAVA也能進行簡單的“函數式編程”。?
它是一個匿名函數,Lambda表達式基于數學中的λ演算得名,直接對應于其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。
2.知識剖析
我們在此抽象一下lambda表達式的一般語法:
上面的lambda表達式語法可以認為是最全的版本,寫起來還是稍稍有些繁瑣。別著急,下面陸續介紹一下lambda表達式的各種簡化版:
1. 參數類型省略–絕大多數情況,編譯器都可以從上下文環境中推斷出lambda表達式的參數類型。這樣lambda表達式就變成了:
當lambda表達式的參數個數只有一個,可以省略小括號。lambda表達式簡寫為:
當lambda表達式只包含一條語句時,可以省略大括號、return和語句結尾的分號。lambda表達式簡化為
3.常見問題
什么時候可以使用它?
4.解決方案
先說一個名詞的概念
函數式接口:Functional Interface.?
定義的一個接口,接口里面必須 有且只有一個抽象方法 ,這樣的接口就成為函數式接口。?
在可以使用lambda表達式的地方,方法聲明時必須包含一個函數式的接口。?
(JAVA8的接口可以有多個default方法)
任何函數式接口都可以使用lambda表達式替換。?
例如:ActionListener、Comparator、Runnable
lambda表達式只能出現在目標類型為函數式接口的上下文中。
注意:?
此處是只能!??!?
意味著如果我們提供的這個接口包含一個以上的Abstract Method,那么使用lambda表達式則會報錯。?
這點已經驗證過了。
場景:?
這種場景其實很常見:?
你在某處就真的只需要一個能做一件事情的函數而已,連它叫什么名字都無關緊要。?
Lambda 表達式就可以用來做這件事。
7.參考文獻
http://blog.csdn.net/jinzhencs/article/details/50748202
http://ifeve.com/lambda/
http://ifeve.com/stream/
PPT:https://ptteng.github.io/PPT/PPT-java/lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F-yyj.html#/
視頻: