【java8新特性】蘭姆達表示式
前言
java8新特性,速度快,程式碼少,便於並行,強大的streamAPI,最大化減少空指標異常,本篇部落格主要總結一下蘭姆達表示式.
核心
Why
Lambda是一個匿名函式,我們可以把Lambda表示式理解為一段可以傳遞的程式碼(將程式碼像資料一樣進行傳遞).可以寫出更簡潔/更靈活的程式碼.作為一種更緊湊的程式碼風格,使java的語言表達能力得到了提升.
What
Lambda表示式包含三部分:
1、左邊:指定了Lambda表示式需要的所有引數
2、一個箭頭符號:->
3、右邊指定了Lambda方法體,即Lambda表示式要執行的功能,可以是表示式和程式碼塊。
Grammer
語法格式一:無引數,無返回值
Runnable r1 = () -> System.out.println("Hello");
語法格式二:有一個引數,並且無返回值
Consumer<String> fun = x)->System.out.println(“Hello”);
語法格式三:若只有一個引數,()可以省略不寫
Consumer<String> fun = x->System.out.println(“Hello Lambda!”);
語法格式四:有兩個以上的引數,有返回值, 並且lambda體中有多條語句
BinaryOperator<Long> bo = (x,y) -> {System.out.println("實現函式介面的方法!";
return x + y;)}
語法格式五:若lambda體中只有一條語句,return和{}都可以省略不寫
BinaryOperator<Long> bo =(x,y) -> x + y;
語法格式六:lambda表示式的引數列表的資料型別可以省略不寫,因為JVM編譯器通過上下文推斷出,資料型別,即“型別推斷”
(x , y) -> Integer.compare(x, y);
函式式介面
我們要注意的是:lambda表示式需要“函式式介面”的支援,那麼什麼是函式式介面呢?
函式式介面:介面只有一個抽象方法的介面,成為函式式介面可以使用註解@FunctionalInterface
四大函式式介面
函式式介面 | 引數型別 | 返回型別 | 用途 |
---|---|---|---|
Consumer < T>消費型介面 | T | void | 對型別為T的物件應用操作,包含方法:void accept (T t) |
Supplier < T>供給型介面 | 無 | T | 返回型別為T的物件,包含方法:T get(); |
Function < T,R>函式型介面 | T | R | 對型別為T的物件應用操作,並返回結果.結果是R型別的物件.包含方法:R apply(T t) |
Predicate < T>斷定型介面 | T | boolean | 確定型別為T的物件是否滿足某約束,並返回Boolean值.包含方法boolean test(T t) |
方法引入與構造器引用
方法引用
當要傳遞給Lambda體的操作,已經有實現的方法了,可以使用方法引用!
( 實現抽象方法的引數列表,必須與方法引用方法的引數列表保持一致! )
方法引用:使用操作符 “ ::” 將方法名和物件或類的名字分隔開來。
如下三種主要使用情況:
物件::例項方法
類::靜態方法
類::例項方法
例如:
Compare((x,y) - > x.equals(y),”abc”,”abc”);
等同於:
Compare(String::equals,”abc”,”abc”);
注意: 當需要引用方法的第一個引數是呼叫物件,並且第二個引數是需要引
用方法的第二個引數(或無引數)時: ClassName::methodName
構造器引用
格式: ClassName::new
與函式式介面相結合,自動與函式式介面中方法相容。
可以把構造器引用賦值給定義的方法,與構造器引數
列表要與介面中抽象方法的引數列表一致!
例如:
Function
陣列引用
格式: type[] :: new
例如:
Function
總結
本篇部落格就總結到這裡了,下一篇我們們繼續總結StreamAPI,感謝讀者的閱讀.
相關文章
- Java8新特性(一)-Lambda表示式Java
- Java8新特性(1):Lambda表示式Java
- java8 新特性之Lambda 表示式Java
- java8特性-lambda表示式Java
- Java8新特性——從Lambda表示式到Stream流Java
- java8的新特性之lambda表示式和方法引用Java
- 好程式設計師分享java8新特性之Lambda表示式程式設計師Java
- 【Java8新特性】Lambda表示式基礎語法,都在這兒了!!Java
- Java8的新特性--函式式介面Java函式
- java8 新特性之函式式介面Java函式
- ?Java8新特性之Lambda表示式,函式式介面,方法引用和default關鍵字Java函式
- Java8新特性探索之函式式介面Java函式
- Java8特性詳解 lambda表示式(一):使用篇Java
- Java8特性詳解 lambda表示式(三):原理篇Java
- JAVA8新特性Java
- Java8 新特性Java
- JDK 1.8 新特性之Lambda表示式JDK
- JDK1.8新特性--Lambda表示式JDK
- jdk1.8新特性:Lambda表示式JDK
- Java 8新特性(一):Lambda表示式Java
- .NET3.5新特性,Lambda表示式
- Java8新特性-四大核心函式式介面Java函式
- Java8新特性 - LambdaJava
- Java8的新特性Java
- JAVA8新特性用法Java
- java8新特性之函式式介面、lambda表示式、介面的預設方法、方法和建構函式的引用Java函式
- JDK1.8新特性之Lambda表示式JDK
- JDK新特性-Lambda表示式的神操作JDK
- JDK1.8新特性之Lambda表示式()->JDK
- java-反射,介面新特性,Lambda表示式Java反射
- PHP8新特性之match表示式PHP
- java8特性-函式式介面Java函式
- Java8新特性實踐Java
- java8新特性stream流Java
- Java8 新特性詳解Java
- Java8新特性系列-LambdaJava
- Java8新特性之:OptionalJava
- Java8新特性--Stream APIJavaAPI