Java8新特性探究—語法篇
1. 通往lambda之路
函式式介面(也叫功能性介面)。簡單來說,函式式介面是隻包含一個方法的介面。比如Java標準庫中的Java.lang.Runnable和Java.util.Comparator都是經典的函式式介面。Java8提供@FunctionalInterface作為註解,這個註解是非必須的,只要介面符合函式式介面的標準(即只包含一個方法的介面),虛擬機器會自動判斷,但最好在介面上使用註解@FunctionalInterface進行宣告,以免團隊的其他人員錯誤的往介面中新增新的方法。
Java中的lambda無法單獨出現,它需要一個函式式介面來盛放,lambda表示式方法體其實就是函式介面的實現,下面講到語法會講到
lambda語法
包含三個部分
一個括號內用逗號分隔的形式引數,引數是函式式接口裡面方法的引數
一個箭頭符號:->
方法體,可以是表示式和程式碼塊,方法體函式式接口裡面方法的實現,如果是程式碼塊,則必須用{}來包裹起來,且需要一個return 返回值,但有個例外,若函式式接口裡面方法返回值是void,則無需{}
總體看起來像這樣
(parameters) -> expression 或者 (parameters) -> { statements; }
例子如下:可以看出,使用lambda表示式設計的程式碼會更加簡潔,而且還可讀。public class TestLambda { public static void runThreadUseLambda(){ new Thread(()->System.out.println("lambda")).start(); } public static void runThreadUseInnerClass(){ new Thread(new Runnable(){ @Override public void run() { System.out.println("InnerClass"); } }).start(); } public static void main(String[] args) { TestLambda。runThreadUseLambda(); TestLambda.runThreadUseInnerClass(); } }
方法引用
其實是lambda表示式的一個簡化寫法,所引用的方法其實是lambda表示式的方法體實現,語法也很簡單,左邊是容器(可以是類名,例項名),中間是"::",右邊是相應的方法名。如下所示:
ObjectReference::methodName
一般方法的引用格式是
- 如果是靜態方法,則是ClassName::methodName。如 Object ::equals
- 如果是例項方法,則是Instance::methodName。如Object obj=new Object();obj::equals;
- 建構函式.則是ClassName::new
總結
以上就是lambda表示式語法的全部內容了,相信大家對lambda 表示式都有一定的理解了,但只是程式碼簡潔了這個好處的話,並不能打動很多觀眾,java 8也不會這麼令人期待,其實java 8引入lambda迫切需求是因為lambda 表示式能簡化集合上資料的多執行緒或者多核的處理,提供更快的集合處理速度 ,這個後續會講到,關於JEP126的這一特性,將分3部分,之所以分開,是因為這一特性可寫的東西太多了,這部分讓讀者熟悉lambda表示式以及方法 引用的語法和概念,第二部分則是虛擬擴充套件方法(default method)的內容,最後一部分則是大資料集合的處理,解開lambda表示式的最強作用的神祕面紗。敬請期待。。。。
相關推薦
Java8新特性探究—語法篇
1. 通往lambda之路 函式式介面(也叫功能性介面)。簡單來說,函式式介面是隻包含一個方法的介面。比如Java標準庫中的Java.lang.Runnable和Java.util.Comparator都是經典的函式式介面。Java8提供@Functi
Java8新特性——lambda表達式.(案例:詞頻統計)
word ont lose args list lower cep stream spa 需求:讀入一個文本文件,確定所有單詞的使用頻率並從高到低排序,打印出所有單詞及其頻率的排序列表 先用傳統方法解: 1 package cn._1.wordfrequency; 2
Java8新特性——lambda表達式.(案例:完全數分類)
完全 boolean lte arraylist efi def oid 輸入 class 需求:輸入一個數,判斷其類型(完全數,過剩數,不足數) 完全數:自身之外所有因數和==自身 過剩數:自身之外所有因數和>自身 不足數:自身之外所有因數和<自身 1 p
Java8 新特性
too opera down font splay eas array display tac 1.接口改善 a.接口中可以定義靜態方法 b.更重要的是,接口中的方法,可以用default修飾後,添加方法體 2.為什麽不能用默認方法來重寫equals,hashcod
Java8新特性之Optional
.get value api new java代碼 optional padding 正常 line 空指針異常一直是困擾Java程序員的問題,也是我們必須要考慮的。當業務代碼中充滿了if else判斷null 的時候程序變得不再優雅,在Java8中提供了Optional類
Java精品高級課,架構課,java8新特性,P2P金融項目,程序設計,功能設計,數據庫設計,第三方支付,web安全,視頻教程
數據庫設計 zfs 調優 pex 完整版 city 後臺 中間件 集群 36套精品Java架構師,高並發,高性能,高可用,分布式,集群,電商,緩存,性能調優,設計模式,項目實戰,P2P金融項目,大型分布式電商實戰視頻教程 視頻課程包含: 高級Java架構師包含:Sp
Java8新特性
java編程 function ats 編碼解碼 sof 企業 void lar 通過 前言: Java 8 已經發布很久了,很多報道表明Java 8 是一次重大的版本升級。在Java Code Geeks上已經有很多介紹Java 8新特性的文章,例如Playing wit
java7和java8新特性
iot use 允許 臨時 default line array 關鍵字 font 以下來至網址: http://blog.csdn.net/samjustin1/article/details/52268004 Java7 新特性 1.switch中可以使用字符串了
java8新特性-方法引用
show acc 函數式 類名 抽象方法 bip pub 構造 -- 方法引用:若 Lambda 體中的功能,已經有方法提供了實現,可以使用方法引用 (可以將方法引用理解為 Lambda 表達式的另外一種表現形式) 1. 對象的引用 :: 實例方法名2. 類
java8新特性-Stream
mat color img reac def list collect array java8 Java8中的Collection接口被擴展,提供了兩個獲取流的方法: default Stream<E>
Java8新特性:接口的默認方法與接口的靜態方法
err 類比 urn 多態 class 數組保存 統一 body bstr 接口的定義 接口的作用是定義該類型的實例要具有的功能,也就是必須執行哪些工作,並且不需要關心這些工作是怎麽具體進行的。接口定義的方法沒有方法體,並且接口不允許定義實例變量。如果一個類實現了這個接口就
java9新特性-8-語法改進:鉆石操作符(Diamond Operator)使用升級
operator opera 技術 shu use img alt filesize cimage 1.使用說明 我們將能夠與匿名實現類共同使用鉆石操作符(diamond operator) 在java8中如下的操作是會報錯的: 編譯報錯信息:‘<&
java9新特性-10-語法改進:UnderScore(下劃線)使用的限制
nta under 標識 -c http form imageview 但是 orm 1.使用說明 在java 8 中,標識符可以獨立使用“_”來命名: 但是,在java 9 中規定“_”不再可以單獨命名標識符了,如果使用,會報錯:
java8新特性學習:stream與lambda
包含 term strong java statistic 管道 特定 getname java8新特性 Streams api 對 Stream 的使用就是實現一個 filter-map-reduce 過程,產生一個最終結果,或者導致一個副作用(side effect)
36套精品Java高級課,架構課,java8新特性,P2P金融項目,程序設計,功能設計,數據庫設計,第三方支付,web安全,高並發,高性能,高可用,分布式,集群,電商,緩存,性能調優,設計模式,項目實戰,大型分布式電商項目實戰視頻教程
java cti 投資 調優 dubbo pac 性能 -s clas 36套精品Java高級課,架構課,java8新特性,P2P金融項目,程序設計,功能設計,數據庫設計,第三方支付,web安全,高並發,高性能,高可用,分布式,集群,電商,緩存,性能調優,設計模式,項
Java8新特性概覽
框架 空指針 定義 申請 ash java程序 .cn 問題 http Java8新特性簡介 a)速度更快 1.對於JVM內存模型的新定義,將方法區從堆內存中移除,以前HotSpot JVM堆內存分為三塊:1.年輕代 2.年老代 3.持久代(即方法區),點擊回顧
Java8新特性-語言新特性
tro 區分 返回 clas pub mark 轉換 底層 表示 一、 Lambda表達式和函數式接口 它允許我們將函數當成參數傳遞給某個方法,或者把代碼本身當作數據處理:函數式開發者非常熟悉這些概念。很多JVM平臺上的語言(Groovy、Scala等)從誕生之日就支
Java8新特性-官方庫新特性
identity nis brush else reat 均值 emp lba long 一、Optional Java應用中最常見的bug就是空值異常。在Java 8之前,Google Guava引入了Optionals類來解決NullPointerExceptio
Java8新特性之forEach遍歷
clas 分享圖片 pos 分享 inf div post for AC 參考文章: https://www.cnblogs.com/billyu/p/6118008.htmlJava8新特性之forEach遍歷
Java8新特性--Lambda表達式
stream 標記 計算 cat ble chm chan 需要 sla 從java8出現以來lambda是最重要的特性之一,它可以讓我們用簡潔流暢的代碼完成一個功能。 很長一段時間java被吐槽是冗余和缺乏函數式編程能力的語言,隨著函數式編程的流行java8種也引入了 這