1. 程式人生 > >Java8新特性探究—語法篇

Java8新特性探究—語法篇

     1. 通往lambda之路

      函式式介面(也叫功能性介面)。簡單來說,函式式介面是隻包含一個方法的介面。比如Java標準庫中的Java.lang.Runnable和Java.util.Comparator都是經典的函式式介面。Java8提供@FunctionalInterface作為註解,這個註解是非必須的,只要介面符合函式式介面的標準(即只包含一個方法的介面),虛擬機器會自動判斷,但最好在介面上使用註解@FunctionalInterface進行宣告,以免團隊的其他人員錯誤的往介面中新增新的方法。

      Java中的lambda無法單獨出現,它需要一個函式式介面來盛放,lambda表示式方法體其實就是函式介面的實現,下面講到語法會講到

      lambda語法

     包含三個部分

      一個括號內用逗號分隔的形式引數,引數是函式式接口裡面方法的引數

      一個箭頭符號:->

      方法體,可以是表示式和程式碼塊,方法體函式式接口裡面方法的實現,如果是程式碼塊,則必須用{}來包裹起來,且需要一個return 返回值,但有個例外,若函式式接口裡面方法返回值是void,則無需{}

        總體看起來像這樣

(parameters) -> expression 或者 (parameters) -> { statements; } 
        例子如下:
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表示式的一個簡化寫法,所引用的方法其實是lambda表示式的方法體實現,語法也很簡單,左邊是容器(可以是類名,例項名),中間是"::",右邊是相應的方法名。如下所示:

ObjectReference::methodName
       一般方法的引用格式是
  1. 如果是靜態方法,則是ClassName::methodName。如 Object ::equals
  2. 如果是例項方法,則是Instance::methodName。如Object obj=new Object();obj::equals;
  3. 建構函式.則是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種也引入了 這