在Java8中引入了一個新的操做符「->」,該操做符稱爲箭頭操做符或Lambda
操做符,左側:Lambda
表示式的參數列表,右側:Lambda
表達式中所要執行的功能,即把函數做爲一個方法的參數,一般多用於匿名內部類的簡潔寫法,同時lambda
表達式也是更好的使用StreamAPI
的基礎。java
接口中只有一個抽象方法的接口,就叫函數式接口。可使用註解@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
斷言型就是作一些判斷操做當要傳遞給Lambda體的操做,已經有了實現的方法,可使用方法引用. (實現抽象方法的參數列表,必須與方法引用方法的參數列表保持一致)。 方法引用:使用操做符「::」將方法名和對象或類的名字分割開,例如:數組
方法引用的實質就是使用更簡單的方式代替Lambda表達式函數
這個能夠說是我用的最多的啦,開發中集合的遍歷,分組,過濾,排序,判斷,篩選等等,Stream是Java8中處理集合的關鍵抽象概念,它能夠指定你但願對集合進行測操做,能夠執行很是複雜的查找,過濾和映射數據的操做,使用Stream API對集合數據進行操做就相似於使用SQL執行的數據庫查詢查詢,Stream API提供了一種高效且易於使用的處理數據的方式。 流(Stream)是數據渠道,用於操做數據源(集合、數組等)所生成的元素序列,「集合講的是數據,流講的是計算」,須要注意的是如下三點:微服務
LocalDateTime是一個不可變的日期時間對象,表明日期時間,一般被視爲年 - 月 - 日 - 時 - 分 - 秒。這個也是在開發中使用的最多的,例如統計數據的時候根據時間分組後,統計當前季度或者下一季度的,或者獲取當前年月,再例如獲取當前月的第一天,當前月的最後的一天,下兩個月的最後一天等等,使用LocalDateTime
均可以很簡單的完成,舉個例子,根據出生日期計算年齡:學習
DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
LocalDate csrq = LocalDate.parse(csrq, dtf);
LocalDate now = LocalDate.now();
return (int)ChronoUnit.YEARS.between(csrq, now);
複製代碼
這個也能夠說是一大神器啦,排除空指針異常呀,有時候本身寫的你還能注意點盼空,隨着微服務的使用,調用其餘系統接口,你也不徹底知作別人會給你返回我的什麼呀,以前咱們可使用三木運算判空或者if
判空,如今可使用Optional
更加優雅的消除空指針。spa
這個雖然沒有以前的新特性用的多,可是在最近的項目開發中使用帶了,就順便記錄一下吧,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);
複製代碼