Java 8 新特性(筆記)

1. Lambda表達(dá)式和函數(shù)式接口

Java 8中,F(xiàn)unction,Consumer,Predicate,Supplier:
Function<T, R>: R apply(T t); 接受一個(gè)入?yún),輸出一個(gè)返回值R鹉胖;
Supplier<T> : T get(); 無(wú)入?yún)⑿燮海敵鲆粋€(gè)類(lèi)型為T(mén)的返回值剃袍;
Consumer<T>:void accept(T t); 輸入一個(gè)入?yún),無(wú)返回小泉;
Predicate<T>: boolean test(T t); 輸入一個(gè)入?yún)肢预,返回一個(gè)boolean值 ;

2. 接口的默認(rèn)方法和靜態(tài)方法

默認(rèn)方法使用default關(guān)鍵字

3. 方法引用

  • 構(gòu)造方法引用(Class::new)
  • 靜態(tài)方法引用(Class:static_method)洼哎,只支持一個(gè)參數(shù)
  • 類(lèi)實(shí)例方法引用(Class::method)烫映,方法沒(méi)有參數(shù)
  • 引用特殊類(lèi)(instance::method),只支持一個(gè)參數(shù)

4. 重復(fù)注釋

5. 更好的類(lèi)型推斷

6. 注解的擴(kuò)展

7. Stream

1)Intermediate:
map (mapToInt, flatMap 等)噩峦、 filter锭沟、 distinct、 sorted壕探、 peek冈钦、 limit郊丛、 skip李请、 parallel、 sequential厉熟、 unordered

2)Terminal:
forEach导盅、 forEachOrdered、 toArray揍瑟、 reduce白翻、 collect、 min绢片、 max滤馍、 count、 anyMatch底循、 allMatch巢株、 noneMatch、 findFirst熙涤、 findAny阁苞、 iterator

3)Short-circuiting:
anyMatch困檩、 allMatch、 noneMatch那槽、 findFirst悼沿、 findAny、 limit

  1. map/flatMap:把 input Stream 的每一個(gè)元素骚灸,映射成 output Stream 的另外一個(gè)元素糟趾。map是一對(duì)一映射,flatMap是一對(duì)多映射甚牲;
  2. filter: 對(duì)原始 Stream 進(jìn)行某項(xiàng)測(cè)試拉讯,通過(guò)測(cè)試的元素被留下來(lái)生成一個(gè)新 Stream
  3. forEach : 在 Stream 的每一個(gè)元素上執(zhí)行該表達(dá)式
  4. peek : 每個(gè)元素執(zhí)行操作并返回一個(gè)新的 Stream
  5. findFirst:返回 Stream 的第一個(gè)元素,或者空鳖藕,重點(diǎn)的是它的返回值類(lèi)型:Optional魔慷,作為一個(gè)容器,它可能含有某值著恩,或者不包含院尔。使用它的目的是盡可能避免 NullPointerException
  6. reduce : 把 Stream 元素組合起來(lái),供一個(gè)起始值(種子)喉誊,然后依照運(yùn)算規(guī)則(BinaryOperator)邀摆,和前面 Stream 的第一個(gè)、第二個(gè)伍茄、第 n 個(gè)元素組合栋盹。
  7. limit/skip : limit 返回 Stream 的前面 n 個(gè)元素;skip 則是扔掉前 n 個(gè)元素
  8. sorted : 排序
  9. min/max/distinct : min 和 max 的功能也可以通過(guò)對(duì) Stream 元素先排序敷矫,再 findFirst 來(lái)實(shí)現(xiàn)例获,但前者的性能會(huì)更好,為 O(n)曹仗,而 sorted 的成本是 O(n log n)榨汤。
  10. distinct 去重
  11. Match : 匹配,allMatch怎茫、anyMatch收壕、noneMatch
  12. Stream.generate:控制流的生成
  13. Stream.iterate:iterate 跟 reduce 操作很像,接受一個(gè)種子值轨蛤,和一個(gè)
    UnaryOperator(例如 f)蜜宪。然后種子值成為 Stream 的第一個(gè)元素,f(seed) 為第二個(gè)祥山,f(f(seed)) 第三個(gè)圃验。與 Stream.generate 相仿,在 iterate 時(shí)候管道必須有 limit 這樣的操作來(lái)限制 Stream 大小枪蘑。
  14. Collectors :輔助進(jìn)行各類(lèi)有用的 reduction 操作损谦,例如轉(zhuǎn)變輸出為 Collection岖免,把 Stream 元素進(jìn)行歸組。
  15. groupingBy/partitioningBy:

8、Stream 的特性可以歸納為:

  • 不是數(shù)據(jù)結(jié)構(gòu)
    它沒(méi)有內(nèi)部存儲(chǔ),它只是用操作管道從 source(數(shù)據(jù)結(jié)構(gòu)蕊苗、數(shù)組、generator function闯参、IO channel)抓取數(shù)據(jù)。
    它也絕不修改自己所封裝的底層數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)悲立。例如 Stream 的 filter 操作會(huì)產(chǎn)生一個(gè)不包含被過(guò)濾元素的新 Stream鹿寨,而不是從 source 刪除那些元素。
    所有 Stream 的操作必須以 lambda 表達(dá)式為參數(shù)
  • 不支持索引訪(fǎng)問(wèn)
    你可以請(qǐng)求第一個(gè)元素薪夕,但無(wú)法請(qǐng)求第二個(gè)脚草,第三個(gè),或最后一個(gè)原献。不過(guò)請(qǐng)參閱下一項(xiàng)馏慨。
    很容易生成數(shù)組或者 List
  • 惰性化
    很多 Stream 操作是向后延遲的,一直到它弄清楚了最后需要多少數(shù)據(jù)才會(huì)開(kāi)始姑隅。
    Intermediate 操作永遠(yuǎn)是惰性化的写隶。
  • 并行能力
    當(dāng)一個(gè) Stream 是并行化的,就不需要再寫(xiě)多線(xiàn)程代碼讲仰,所有對(duì)它的操作會(huì)自動(dòng)并行進(jìn)行的慕趴。
  • 可以是無(wú)限的
    集合有固定大小,Stream 則不必鄙陡。limit(n) 和 findFirst() 這類(lèi)的 short-circuiting 操作可以對(duì)無(wú)限的 Stream 進(jìn)行運(yùn)算并很快完成冕房。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柔吼,隨后出現(xiàn)的幾起案子毒费,更是在濱河造成了極大的恐慌丙唧,老刑警劉巖愈魏,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異想际,居然都是意外死亡培漏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)胡本,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)牌柄,“玉大人,你說(shuō)我怎么就攤上這事侧甫∩河叮” “怎么了蹋宦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)咒锻。 經(jīng)常有香客問(wèn)我冷冗,道長(zhǎng),這世上最難降的妖魔是什么惑艇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任蒿辙,我火速辦了婚禮,結(jié)果婚禮上滨巴,老公的妹妹穿的比我還像新娘思灌。我一直安慰自己,他們只是感情好恭取,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布泰偿。 她就那樣靜靜地躺著,像睡著了一般蜈垮。 火紅的嫁衣襯著肌膚如雪甜奄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天窃款,我揣著相機(jī)與錄音课兄,去河邊找鬼。 笑死晨继,一個(gè)胖子當(dāng)著我的面吹牛烟阐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播紊扬,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜒茄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了餐屎?” 一聲冷哼從身側(cè)響起檀葛,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腹缩,沒(méi)想到半個(gè)月后屿聋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡藏鹊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年润讥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盘寡。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡楚殿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出竿痰,到底是詐尸還是另有隱情脆粥,我是刑警寧澤砌溺,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站变隔,受9級(jí)特大地震影響抚吠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弟胀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一楷力、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孵户,春花似錦萧朝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至竖配,卻和暖如春何址,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背进胯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工用爪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胁镐。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓偎血,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盯漂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颇玷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 第一章 為什么要關(guān)心Java 8 使用Stream庫(kù)來(lái)選擇最佳低級(jí)執(zhí)行機(jī)制可以避免使用Synchronized(同...
    謝隨安閱讀 1,495評(píng)論 0 4
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)就缆,斷路器帖渠,智...
    卡卡羅2017閱讀 134,704評(píng)論 18 139
  • 章節(jié)內(nèi)容篩選、切片和匹配查找竭宰、匹配和規(guī)約使用數(shù)值范圍等數(shù)值流從多個(gè)源創(chuàng)建流無(wú)限流 篩選和切片 用謂詞篩選 Stre...
    謝隨安閱讀 3,871評(píng)論 0 0
  • Java 8的新特性可以幫助你: 1.使用Java 8可以減少冗長(zhǎng)的代碼空郊,讓代碼更易于理解 2.通過(guò)方法引用和St...
    Phoenix小彬閱讀 953評(píng)論 0 2
  • Jav8中,在核心類(lèi)庫(kù)中引入了新的概念羞延,流(Stream)渣淳。流使得程序媛們得以站在更高的抽象層次上對(duì)集合進(jìn)行操作。...
    仁昌居士閱讀 3,640評(píng)論 0 6