Java8常用的新特性總結(jié)

一、Java8常用的新特性總結(jié)

1.1.Java8常用特性總覽

image-20190513214122701

1.2.lambda表達(dá)式

在Java8中引入了一個(gè)新的操作符“->”,該操作符稱為箭頭操作符或Lambda操作符,左側(cè):Lambda表示式的參數(shù)列表,右側(cè):Lambda表達(dá)式中所要執(zhí)行的功能,即把函數(shù)作為一個(gè)方法的參數(shù),通常多用于匿名內(nèi)部類的簡潔寫法,同時(shí)lambda表達(dá)式也是更好的使用StreamAPI的基礎(chǔ)。

1.3.函數(shù)式接口

接口中只有一個(gè)抽象方法的接口,就叫函數(shù)式接口。可以使用注解@FunctionalInterface檢查是否為函數(shù)式接口。例如,我們可以定義一個(gè)處理一個(gè)數(shù)的的函數(shù)接口,數(shù)就是函數(shù)接口的參數(shù),每次怎么處理就是這個(gè)函數(shù)接口的實(shí)現(xiàn),我們調(diào)用這個(gè)函數(shù)接口的時(shí)候就傳入要處理的數(shù)字和處理邏輯就可。簡單示例如下:

@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);
}

四大核心函數(shù)接口

  • Consumer消費(fèi)型接口: 參數(shù)類型 T 返回類型 void 對類型T的對象應(yīng)用操作,Consumer消費(fèi)型是傳入一個(gè)參數(shù),進(jìn)行處理
  • Supplier供給型接口: 參數(shù)類型 無 返回類型 T 返回類型為T的對象,Supplier供給型是得到一些結(jié)果
  • Function<T,R>函數(shù)型接口: 參數(shù)類型 T 返回類型 R 對了類型為T的對象應(yīng)用操作,并返回結(jié)果,Function函數(shù)型是傳入一個(gè)參數(shù),處理后返回一個(gè)結(jié)果
  • Predicate斷言型接口: 參數(shù)類型 T 返回類型boolean確定類型為T的對象是否滿足某約束,并返回布爾值。Predicate斷言型就是做一些判斷操作

1.4.方法引用和數(shù)組引用

當(dāng)要傳遞給Lambda體的操作,已經(jīng)有了實(shí)現(xiàn)的方法,可以使用方法引用. (實(shí)現(xiàn)抽象方法的參數(shù)列表,必須與方法引用方法的參數(shù)列表保持一致)。 方法引用:使用操作符“::”將方法名和對象或類的名字分割開,例如:

  1. 對象::實(shí)例方法
  2. 類::靜態(tài)方法
  3. 類::實(shí)例方法

方法引用的實(shí)質(zhì)就是使用更簡單的方式代替Lambda表達(dá)式

1.5.StreamAPI

這個(gè)可以說是我用的最多的啦,開發(fā)中集合的遍歷,分組,過濾,排序,判斷,篩選等等,Stream是Java8中處理集合的關(guān)鍵抽象概念,它可以指定你希望對集合進(jìn)行測操作,可以執(zhí)行非常復(fù)雜的查找,過濾和映射數(shù)據(jù)的操作,使用Stream API對集合數(shù)據(jù)進(jìn)行操作就類似于使用SQL執(zhí)行的數(shù)據(jù)庫查詢查詢,Stream API提供了一種高效且易于使用的處理數(shù)據(jù)的方式。 流(Stream)是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列,“集合講的是數(shù)據(jù),流講的是計(jì)算”,需要注意的是以下三點(diǎn):

  • Stream自己不會存儲元素
  • Stream不會改變源對象,相會,他們會返回一個(gè)持有結(jié)果的新的Stream
  • Stream操作是延遲執(zhí)行的,這意味著他們會等到需要結(jié)果的時(shí)候才執(zhí)行。

Stream使用方法

  • 創(chuàng)建Stream:一個(gè)數(shù)據(jù)源(集合、數(shù)組)獲取一個(gè)流
  • 中間操作:一個(gè)中間操作鏈,對數(shù)據(jù)源的數(shù)據(jù)進(jìn)行處理
  • 終止操作:一個(gè)終止操作,執(zhí)行中間操作鏈,并產(chǎn)生結(jié)果。

1.6.LocalDateTime

LocalDateTime是一個(gè)不可變的日期時(shí)間對象,代表日期時(shí)間,通常被視為年 - 月 - 日 - 時(shí) - 分 - 秒。這個(gè)也是在開發(fā)中使用的最多的,例如統(tǒng)計(jì)數(shù)據(jù)的時(shí)候根據(jù)時(shí)間分組后,統(tǒng)計(jì)當(dāng)前季度或者下一季度的,或者獲取當(dāng)前年月,再例如獲取當(dāng)前月的第一天,當(dāng)前月的最后的一天,下兩個(gè)月的最后一天等等,使用LocalDateTime都可以很簡單的完成,舉個(gè)例子,根據(jù)出生日期計(jì)算年齡:

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

這個(gè)也可以說是一大神器啦,排除空指針異常呀,有時(shí)候自己寫的你還能注意點(diǎn)盼空,隨著微服務(wù)的使用,調(diào)用其他系統(tǒng)接口,你也不完全知道別人會給你返回個(gè)人什么呀,之前我們可以使用三木運(yùn)算判空或者if判空,現(xiàn)在可以使用Optional更加優(yōu)雅的消除空指針。

1.8.Base64

這個(gè)雖然沒有之前的新特性用的多,但是在最近的項(xiàng)目開發(fā)中使用帶了,就順便記錄一下吧,

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.更多更詳細(xì)信息

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java8 in action 沒有共享的可變數(shù)據(jù),將方法和函數(shù)即代碼傳遞給其他方法的能力就是我們平常所說的函數(shù)式...
    鐵牛很鐵閱讀 1,357評論 1 2
  • java8新特性 原創(chuàng)者:文思 一、特性簡介 速度更快 代碼更少,增加了Lambda 強(qiáng)大的Stream API ...
    文思li閱讀 3,098評論 1 1
  • 對于Java開發(fā)者來說,Java8的版本顯然是一個(gè)具有里程碑意義的版本,蘊(yùn)含了許多令人激動的新特性,如果能利用好這...
    jackcooper閱讀 1,085評論 0 6
  • 對于Java開發(fā)者來說,Java8的版本顯然是一個(gè)具有里程碑意義的版本,蘊(yùn)含了許多令人激動的新特性,如果能利用好這...
    huanfuan閱讀 622評論 0 9
  • 同事小王業(yè)務(wù)水平很高,疑難雜活大家搞不定的時(shí)候他常常一句話就可以點(diǎn)中要點(diǎn),順利解決問題,因此領(lǐng)導(dǎo)對他的業(yè)務(wù)能力很是...
    朱紅娟閱讀 418評論 2 2

友情鏈接更多精彩內(nèi)容