如何評價Java8的特性?
隨著編程語言生態系統的氣候不斷變化以及技術的革新,經歷20余年的發展,Java逐漸演變成長為Java8。相比之前只是單純的面向對象編程語言,Java8增加了很多新特性。
Java 8對于程序員的主要好處在于它提供了更多的編程工具和概念,能以更為簡潔、更易于維護的方式解決新的或現有的編程問題。在Java 8中有兩個著名的改進:一個是Lambda表達式,一個是Stream。
Lambda表達式是什么?
Lambda表達式,也可稱為閉包,它允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)。使用Lambda表達式可以使代碼變的更加簡潔緊湊,Lambda表達式的語法格式:
(parameters) -> expression或(parameters) ->{ statements; }
Lambda表達式的重要特征:
可選類型聲明:不需要聲明參數類型,編譯器可以統一識別參數值。
可選的參數圓括號:一個參數無需定義圓括號,但多個參數需要定義圓括號。
可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
可選的返回關鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定明表達式返回了一個數值。
使用Lambda表達式需要注意以下兩點:
Lambda表達式主要用來定義行內執行的方法類型接口,例如,一個簡單方法接口。在上面例子中,我們使用各種類型的Lambda表達式來定義MathOperation接口的方法。然后我們定義了sayMessage的執行。
Lambda表達式免去了使用匿名方法的麻煩,并且給予Java簡單但是強大的函數化的編程能力。
Stream是什么?
Stream就是一個流,它的主要作用就是對集合數據進行查找過濾等操作。Java 8中的 Stream是對集合(Collection)對象功能的增強,它專注于對集合對象進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數據操作(bulk data operation)。
對于基本數值型,目前有三種對應的包裝類型Stream:IntStream、LongStream、DoubleStream。當然我們也可以用Stream<Integer>、Stream<Long> >、Stream<Double>,但是boxing和 unboxing會很耗時,所以特別為這三種基本數值型提供了對應的Stream。
Java 8中還沒有提供其它數值型Stream,因為這將導致擴增的內容較多。而常規的數值型聚合運算可以通過上面三種Stream進行。
Stream上的操作分為兩類:中間操作和結束操作。中間操作只是一種標記,只有結束操作才會觸發實際計算。
中間操作又可以分為無狀態的(Stateless)和有狀態的(Stateful),無狀態中間操作是指元素的處理不受前面元素的影響,而有狀態的中間操作必須等到所有元素處理之后才知道最終結果,比如排序是有狀態操作,在讀取所有元素之前并不能確定排序結果。
結束操作又可以分為短路操作和非短路操作,短路操作是指不用處理全部元素就可以返回結果,比如找到第一個滿足條件的元素。之所以要進行如此精細的劃分,是因為底層對每一種情況的處理方式不同。
想要永遠處于優勢地位,就要不斷的完善自身、更新技術。