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