Java基礎(chǔ)知識(8)-- Java8新特性

https://juejin.im/post/5cd97ccb518825686b1209ea

http://www.itdecent.cn/p/15c90dacf134

1、lambda表達(dá)式

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

變量作用域:lambda 表達(dá)式只能引用 final 或 final 局部變量,這就是說不能在 lambda 內(nèi)部修改定義在域外的變量,否則會編譯錯誤。

2、函數(shù)式接口

Lambda的設(shè)計(jì)者們?yōu)榱俗尙F(xiàn)有的功能與Lambda表達(dá)式良好兼容,考慮了很多方法,于是產(chǎn)生了函數(shù)接口這個(gè)概念。

函數(shù)式接口(Functional Interface)就是只具有一個(gè)抽象方法的普通接口。

在實(shí)踐中,函數(shù)式接口非常脆弱:只要某個(gè)開發(fā)者在該接口中添加一個(gè)函數(shù),則該接口就不再是函數(shù)式接口進(jìn)而導(dǎo)致編譯失敗。為了克服這種代碼層面的脆弱性,并顯式說明某個(gè)接口是函數(shù)式接口,Java 8 提供了一個(gè)特殊的注解@FunctionalInterface

@FunctionalInterface

public interface Functional{

void method();

}

需要注意,默認(rèn)方法和靜態(tài)方法不會破壞函數(shù)式接口的定義。

3、默認(rèn)方法和靜態(tài)方法

Java 8使用兩個(gè)新概念擴(kuò)展了接口的含義:默認(rèn)方法和靜態(tài)方法。

簡單說,默認(rèn)方法就是接口可以有實(shí)現(xiàn)方法,而且不需要實(shí)現(xiàn)類去實(shí)現(xiàn)其方法。

我們只需在方法名前面加個(gè)default關(guān)鍵字即可實(shí)現(xiàn)默認(rèn)方法。

4、方法引用

方法引用是lambda表達(dá)式的一種特殊形式,如果正好有某個(gè)方法滿足一個(gè)lambda表達(dá)式的形式,那就可以將這個(gè)lambda表達(dá)式用方法引用的方式表示,但是如果這個(gè)lambda表達(dá)式的比較復(fù)雜就不能用方法引用進(jìn)行替換。實(shí)際上方法引用是lambda表達(dá)式的一種語法糖。方法引用的實(shí)質(zhì)就是使用更簡單的方式代替Lambda表達(dá)式。

在介紹方法引用使用方式之前,先將方法引用分下類

方法引用共分為四類:

1.類名::靜態(tài)方法名

2.對象::實(shí)例方法名

3.類名::實(shí)例方法名?

4.類名::new

5、Stream API

可以把Stream當(dāng)成一個(gè)高級版本的Iterator。原始版本的Iterator,用戶只能一個(gè)一個(gè)的遍歷元素并對其執(zhí)行某些操作;高級版本的Stream,用戶只要給出需要對其包含的元素執(zhí)行什么操作,比如“過濾掉長度大于10的字符串”、“獲取每個(gè)字符串的首字母”等,具體這些操作如何應(yīng)用到每個(gè)元素上,就給Stream就好了!

Stream使用方法:

創(chuàng)建Stream:一個(gè)數(shù)據(jù)源(集合、數(shù)組)獲取一個(gè)流

中間操作:一個(gè)中間操作鏈,對數(shù)據(jù)源的數(shù)據(jù)進(jìn)行處理

終止操作:一個(gè)終止操作,執(zhí)行中間操作鏈,并產(chǎn)生結(jié)果。

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都可以很簡單的完成。

7、Optional

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

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

?著作權(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)容

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