java lambda表达式详解_Lambda表达式详解
1 Lambda表達式是Java8中的新特性
Java8中引入Lambda表達式,使得java可以函數式編程,在并發性能上邁出了實質性的一步。
什么是函數式編程?函數式編程(英語:functional programming)或稱函數程序設計,又稱泛函編程,是一種編程范型,它將電腦運算視為數學上的函數計算,并且避免使用程序狀態以及易變對象。函數編程語言最重要的基礎是λ演算(lambda calculus)。而且λ演算的函數可以接受函數當作輸入(引數)和輸出(傳出值)。
ps:λ這個符號可以在搜狗輸入法的符號中顯示
而在面向對象編程中,面向對象程序設計(英語:Object-oriented programming,縮寫:OOP)是種具有對象概念的程序編程范型,同時也是一種程序開發的方法。它可能包含數據、屬性、代碼與方法。對象則指的是類的實例。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性,對象里的程序可以訪問及經常修改對象相關連的數據。在面向對象程序編程里,計算機程序會被設計成彼此相關的對象。
2 lambda表達式能干什么?
@FunctionalInterface使用匿名內部類的一個問題是:當一個匿名內部類的實現非常簡單,比如說接口只有一個抽象函數 ,那么匿名內部類的語法有點笨拙且不清晰。
使用下面這種方法的時候,不需要再使用new XXX(){}這種繁瑣代碼,不需要指出重寫的方法的名字,也不需要給出重寫方法的返回值類型,只要給出重寫的方法括號以及括號里的形參列表即可
從上面介紹考科一看出,當使用Lambda表達式代替匿名內部類創建對象時,Lambda表達式的代碼塊將會代替實現抽象方法的方法體,Lambda表達式就相當于一個匿名方法
3 語法
(參數)->表達式 或 (參數)->{方法體;}
1.形參列表:
形參列表允許省略形參類型,若形參列表中只有一個參數,形參列表的圓括號也可以省略代碼
2.箭頭(->)
必須通過英文中劃線號和大于符號組成
3.代碼塊:
如果代碼塊只包含一條語句,lambda表達式允許省略代碼塊的花括號,那么這條語句就不要用花括號表示語句結束
lambda代碼塊只有一條return語句,甚至可以省略return關鍵字
lambda表達式需要返回值,而它的代碼塊中僅有一條省略了return的語句,lambda表達式會自動返回這條語句的結果
lambda表達式的寫法:
interfacelambda表達式就可以把函數當做函數的參數,代碼(函數)當做數據(形參),這種特性滿足上述需求。當要實現只有一個抽象函數的接口時,使用lambda表達式能夠更靈活。
interface4 Lambda表達式與函數式接口
在上面的案例中.方法的參數的數據類型或是獲取一個對象,但是在實際調用中我們傳入的是一個lambda表達式,可以發現程序可以
正常編譯,運行,這說明Lambda表達式實際上將會被當成一個"類型"的對象
Lambda表達式的類型,也被稱為"目標類型(target type)",Lambda表達式的目標類型必須是"函數式接口(functional interface)"
ps:Java8新引入的概念,函數接口(functional interface)。它的定義是:一個接口,如果只有一個顯式聲明的抽象方法,那么它就是一個函數接口。一般用@FunctionalInterface標注出來 (也可以不標記),函數式接口可以包含多個default或static方法,但是只能聲明一個抽象方法
@FuctionalInterface主要作用就是檢查當前接口是不是函數接口
若想使用lambdaname目標必須是一個函數接口
5 Lambda表達式引用全局和局部變量
@FunctionalInterface6 方法引用與構造器引用
如果Lambda表達式的代碼塊只有一條代碼,程序就可以省略Lambda表達式中的代碼塊的花括號
不僅如此,如果Lambda表達式的代碼塊只有一條代碼,還可以在代碼塊中使用方法引用和構造器引用
方法引用和構造器引用都需要使用::兩個英文冒號
6.1 引用類方法
在函數式接口中定義的抽象方法,而方法的實現是觸發某個類.方法(調用類方法的形式)來完成時可以使用
@FunctionalInterface6.2 引用特定對象的實例方法
在函數式接口中定義的抽象方法,而方法的實現是觸發對象.方法(調用類方法的形式)來完成時可以使用
@FunctionalInterface6.3 引用某類對象的實例方法
在函數式接口中定義的抽象方法,而方法的實現是觸發是方法中第一個參數的對象.方法(調用類方法的形式)來完成時可以使用
@FunctionalInterface6.4 引用構造方法
在函數式接口中定義的抽象方法,而方法的返回值是一個對應類的實例
@FunctionalInterface7 Lambda表達式和匿名內部類的區別
1.匿名內部類可以為任意接口創建實例,不管接口包含多少個抽象方法,只要匿名內部類實現所有的抽象方法即可
但Lambda表達式只能為函數式接口創建實例(即只能有一個抽象方法)
2.匿名內部類可以為抽象類甚至是普通類創建實例
但Lambda表達式只能為函數式接口創建實例
3.匿名內部類實現的抽象方法的方法體允許調用接口中定義的默認(default)方法
但Lambda表達式的代碼塊不允許調用接口中的默認(default)方法
8 Lambda表達式應用
String總結
以上是生活随笔為你收集整理的java lambda表达式详解_Lambda表达式详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网站能拿到其他网站的cookie_在网站
- 下一篇: springboot api文档_Spr