Java8經常使用的新特性總結

1、Java8經常使用的新特性總結

1.1.Java8經常使用特性總覽

image-20190513214122701

1.2.lambda表達式

在Java8中引入了一個新的操做符「->」,該操做符稱爲箭頭操做符或Lambda操做符,左側:Lambda表示式的參數列表,右側:Lambda表達式中所要執行的功能,即把函數做爲一個方法的參數,一般多用於匿名內部類的簡潔寫法,同時lambda表達式也是更好的使用StreamAPI的基礎。java

1.3.函數式接口

接口中只有一個抽象方法的接口,就叫函數式接口。可使用註解@FunctionalInterface檢查是否爲函數式接口。例如,咱們能夠定義一個處理一個數的的函數接口,數就是函數接口的參數,每次怎麼處理就是這個函數接口的實現,咱們調用這個函數接口的時候就傳入要處理的數字和處理邏輯就可。簡單示例以下:數據庫

@FunctionalInterface
public interface MyFun {
    public Integer getValue(Integer num);
}
複製代碼
public Integer operation(Integer num,MyFun mf){
    return mf.getValue(num);
}
複製代碼
@Test
public void test5(){
    Integer num = operation(100,(x)-> x*x);
    System.out.println(num);
}
複製代碼

四大核心函數接口

  • Consumer消費型接口: 參數類型 T 返回類型 void 對類型T的對象應用操做,Consumer消費型是傳入一個參數,進行處理
  • Supplier供給型接口: 參數類型 無 返回類型 T 返回類型爲T的對象,Supplier供給型是獲得一些結果
  • Function<T,R>函數型接口: 參數類型 T 返回類型 R 對了類型爲T的對象應用操做,並返回結果,Function函數型是傳入一個參數,處理後返回一個結果
  • Predicate斷言型接口: 參數類型 T 返回類型boolean肯定類型爲T的對象是否知足某約束,並返回布爾值。Predicate斷言型就是作一些判斷操做

1.4.方法引用和數組引用

當要傳遞給Lambda體的操做,已經有了實現的方法,可使用方法引用. (實現抽象方法的參數列表,必須與方法引用方法的參數列表保持一致)。 方法引用:使用操做符「::」將方法名和對象或類的名字分割開,例如:數組

  1. 對象::實例方法
  2. 類::靜態方法
  3. 類::實例方法

方法引用的實質就是使用更簡單的方式代替Lambda表達式函數

1.5.StreamAPI

這個能夠說是我用的最多的啦,開發中集合的遍歷,分組,過濾,排序,判斷,篩選等等,Stream是Java8中處理集合的關鍵抽象概念,它能夠指定你但願對集合進行測操做,能夠執行很是複雜的查找,過濾和映射數據的操做,使用Stream API對集合數據進行操做就相似於使用SQL執行的數據庫查詢查詢,Stream API提供了一種高效且易於使用的處理數據的方式。 流(Stream)是數據渠道,用於操做數據源(集合、數組等)所生成的元素序列,「集合講的是數據,流講的是計算」,須要注意的是如下三點:微服務

  • Stream本身不會存儲元素
  • Stream不會改變源對象,相會,他們會返回一個持有結果的新的Stream
  • Stream操做是延遲執行的,這意味着他們會等到須要結果的時候才執行。

Stream使用方法

  • 建立Stream:一個數據源(集合、數組)獲取一個流
  • 中間操做:一箇中間操做鏈,對數據源的數據進行處理
  • 終止操做:一個終止操做,執行中間操做鏈,併產生結果。

1.6.LocalDateTime

LocalDateTime是一個不可變的日期時間對象,表明日期時間,一般被視爲年 - 月 - 日 - 時 - 分 - 秒。這個也是在開發中使用的最多的,例如統計數據的時候根據時間分組後,統計當前季度或者下一季度的,或者獲取當前年月,再例如獲取當前月的第一天,當前月的最後的一天,下兩個月的最後一天等等,使用LocalDateTime均可以很簡單的完成,舉個例子,根據出生日期計算年齡:學習

DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
LocalDate csrq = LocalDate.parse(csrq, dtf);
LocalDate now = LocalDate.now();
return (int)ChronoUnit.YEARS.between(csrq, now);
複製代碼

1.7.Optional

這個也能夠說是一大神器啦,排除空指針異常呀,有時候本身寫的你還能注意點盼空,隨着微服務的使用,調用其餘系統接口,你也不徹底知作別人會給你返回我的什麼呀,以前咱們可使用三木運算判空或者if判空,如今可使用Optional更加優雅的消除空指針。spa

1.8.Base64

這個雖然沒有以前的新特性用的多,可是在最近的項目開發中使用帶了,就順便記錄一下吧,3d

String text = "show me the code";

String encoded = Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8));
String decoded = new String(Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8);
複製代碼

1.9.更多更詳細信息

相關文章
相關標籤/搜索