JDK1.8的新特性之Lambda表示式
(一)JDK1.8的新特性之Lambda表示式
什麼是Lambda表示式?
可以將Lambda表示式理解為一個匿名函式; Lambda表示式允許將一個函式作為另外一個函式的引數; 我們可以把 Lambda 表示式理解為是一段可以傳遞的程式碼(將程式碼作為實參),也可以理解為函數語言程式設計,將一個函式作為引數進行傳遞。
為什麼要引入Lambda表示式?
這就好像小強看到小明的手裡拿了一把玩具手槍,自己也想擁有一把一樣。當java程式設計師看到其他語言的程式設計師(如JS,Python)在使用閉包或者Lambda表示式的時候,於是開始吐槽世界上使用最廣的語言居然不支援函數語言程式設計。千呼萬喚,Java8推出了Lambda表示式。
Lambda表示式能夠讓程式設計師的程式設計更加高效
Lambda 是一個匿名函式,我們可以把 Lambda表示式理解為是一段可以傳遞的程式碼(將程式碼像資料一樣進行傳遞)。可以寫出更簡潔、更靈活的程式碼。作為一種更緊湊的程式碼風格,使Java的語言表達能力得到了提升。
那我們來看一下如何書寫Lambda的表示式
Lambda表示式的語法:
([Lambda引數列表,即形參列表]) -> {Lambda體,即方法體}
拷貝小括號,寫死右箭頭,落地大括號,大括號中寫上業務邏輯
特點:使用 "->"將引數和實現邏輯分離;( ) 中的部分是需要傳入Lambda體中的引數;{ } 中部分,接收來自 ( ) 中的引數,完成一定的功能。
Lambda 表示式在Java 語言中引入了一個新的語法元素和操作符。這個操作符為 “ ->” , 該操作符被稱為 Lambda 操作符或箭頭操作符。它將 Lambda 分為兩個部分:
左側: 指定了 Lambda 表示式需要的所有引數
右側: 指定了 Lambda 體,即 Lambda 表示式要執行的功能
上述 Lambda 表示式中的引數型別都是由編譯器推斷得出的。 Lambda 表示式中無需指定型別,程式依然可以編譯,這是因為 javac 根據程式的上下文,在後臺推斷出了引數的型別。 Lambda 表示式的型別依賴於上下文環境,是由編譯器推斷出來的。這就是所謂的“型別推斷”
.
什麼是函式式介面
上文我們提到函式式介面,那麼其實我們的Lambda表示式就是對函式式介面的一種簡寫方式,所以只有是函式式介面,我們才能用Lambda表示式.再換句話說,Lambda表示式需要函式式介面的支援,那函式式介面我們可以自己定義,當然JDK1.8也給我們提供了一些現成的函式式介面.
函式式介面的定義是: 只包含一個抽象方法的介面,稱為函式式介面。
你可以通過 Lambda 表示式來建立該介面的物件
我們可以在任意函式式介面上使用 @FunctionalInterface 註解,這樣做可以檢查它是否是一個函式式介面,同時 javadoc 也會包含一條宣告,說明這個介面是一個函式式介面.
方法引用與構造器引用
我們先來看一下什麼是方法引用:方法引用其實是Lambda表示式的另一種寫法,
當要傳遞給Lambda體的操作,已經有實現的方法了,可以使用方法引用.
注意:實現抽象方法的引數列表,必須與方法引用方法的引數列表保持一致!
方法引用:使用操作符 “ ::” 將方法名和物件或類的名字分隔開來。
如下三種主要使用情況:
物件::例項方法
類::靜態方法
類::例項方法
當需要引用方法的第一個引數是呼叫物件,並且第二個引數是需要引
用方法的第二個引數(或無引數) 時:ClassName::methodName
構造器引用
格式:ClassName::new
與函式式介面相結合,自動與函式式介面中方法相容。可以把構造器引用賦值給定義的方法,與構造器引數列表要與介面中抽象方法的引數列表一致!
相關文章
- JDK1.8新特性之Lambda表示式JDK
- JDK1.8新特性之Lambda表示式()->JDK
- JDK1.8新特性--Lambda表示式JDK
- jdk1.8新特性:Lambda表示式JDK
- jdk1.8 新特性之 如何寫lambda表示式JDK
- JDK1.8 之Lambda表示式JDK
- JDK1.8之lambda表示式JDK
- JDK 1.8 新特性之Lambda表示式JDK
- java8 新特性之Lambda 表示式Java
- JDK1.8新特性:Lambda表示式語法和內建函式式介面JDK函式
- JDK1.8之Lambda解析與表示式的使用JDK
- [Java學習筆記]JDK1.8新特性學習(一)Lambda表示式Java筆記JDK
- JDK新特性-Lambda表示式的神操作JDK
- Java 8新特性(一):Lambda表示式Java
- .NET3.5新特性,Lambda表示式
- java8的新特性之lambda表示式和方法引用Java
- JDK1.8及以上的Lambda表示式JDK
- JDK1.8 Lambda 表示式的學習JDK
- Java8新特性(一)-Lambda表示式Java
- Java8新特性(1):Lambda表示式Java
- java-反射,介面新特性,Lambda表示式Java反射
- jdk1.8 lambda表示式入門JDK
- JDK1.8中Lambda表示式的應用JDK
- 好程式設計師分享java8新特性之Lambda表示式程式設計師Java
- 深圳Java培訓學習:Java8.0新特性之Lambda表示式Java
- java8特性-lambda表示式Java
- Java8新特性——從Lambda表示式到Stream流Java
- C#10新特性-lambda 表示式和方法組的改進C#
- Java之lambda表示式Java
- ?Java8新特性之Lambda表示式,函式式介面,方法引用和default關鍵字Java函式
- 好程式設計師Java教程分享Java8.0新特性之Lambda表示式程式設計師Java
- 【Java新特性】Lambda表示式典型案例,你想要的的都在這兒了!!Java
- c++之lambda表示式C++
- PHP8新特性之match表示式PHP
- java8新特性之函式式介面、lambda表示式、介面的預設方法、方法和建構函式的引用Java函式
- Python3之lambda表示式Python
- Java8特性詳解 lambda表示式(二):流式處理中的lambdaJava
- lambda 表示式