成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

「Java 8 函數(shù)式編程」讀書筆記——類庫

MingjunYang / 613人閱讀

摘要:本書第四章的讀書筆記本章主要闡述如何使用表達(dá)式基本類型考慮到裝箱類型過于占用內(nèi)存提供了針對(duì)基本類型的操作以達(dá)到優(yōu)化的效果如方法對(duì)基本類型做特殊處理的方法在命名上有明確規(guī)范如果返回類型為基本類型則在基本類型名稱前面加如果參數(shù)類型是基本類型則不

本書第四章的讀書筆記, 本章主要闡述: 如何使用Lambda表達(dá)式.

基本類型

考慮到裝箱類型過于占用內(nèi)存, JDK提供了針對(duì)基本類型的操作, 以達(dá)到優(yōu)化的效果, 如mapToLong方法.

對(duì)基本類型做特殊處理的方法在命名上有明確規(guī)范:

如果返回類型為基本類型, 則在基本類型名稱前面加To

如果參數(shù)類型是基本類型, 則不加前綴只需類型名即可

如果敢接函數(shù)使用基本類型, 則在操作名后加To, 再加基本類型名, 如mapToLong

summaryStatistics方法

這些為基本類型進(jìn)行優(yōu)化的Stream還有一些額外的方法, 避免重復(fù)實(shí)現(xiàn)一些通用方法, 比如summaryStatistics方法.

public static void printSummary(List productions) {
  DoubleSummaryStatistics priceStats = productions.stream()
    .mapToDouble(prod -> prod.getPrice())
    .summaryStatistics();
  System.out.printf("max: %f, min: %f, ave: %f, sum: %f",
                   priceStats.getMax(),
                   priceStats.getMin(),
                   priceStats.getAberage(),
                   priceStats.getSum());
}
重載解析

Lambda表達(dá)式作為參數(shù)時(shí), 其類型由它的目標(biāo)類型(方法的參數(shù)類型)推導(dǎo)得出, 推導(dǎo)過程遵循如下規(guī)則:

如果只有一個(gè)可能的目標(biāo)類型, 由相應(yīng)函數(shù)接口里的參數(shù)類型推導(dǎo)得出

如果有多個(gè)可能的目標(biāo)類型, 由最具體的類型推導(dǎo)得出

如果有多個(gè)可能的目標(biāo)類型且最具體的類型不明確, 則需要人為指定類型

@FunctionalInterface

該注解會(huì)強(qiáng)制javac檢查一個(gè)接口是否符合函數(shù)接口的標(biāo)準(zhǔn). 如果該注解被添加給一個(gè)枚舉類型, 類或者另一個(gè)注解, 或者接口包含不止一個(gè)抽象方法, javac就會(huì)報(bào)錯(cuò).

默認(rèn)方法 產(chǎn)生原因

由于集合框架的基本接口如Collection Map等都新增了stream方法, 在以前的版本中, 第三方的類庫如果實(shí)現(xiàn)了Collection這樣的接口, 必須新增stream方法的實(shí)現(xiàn), 否則無法通過Java 8的編譯.

為了避免這種情況, Java 8中添加的新的語言特性: 默認(rèn)方法

編寫方法

Java 8中的任何接口都可以添加默認(rèn)方法, 使用default關(guān)鍵字修飾, 比如forEach方法:

default void forEach(Consumer action) {
  for (T t : this) {
    action.accept(t);
  }
}

因?yàn)榻涌跊]有成員變量, 所以默認(rèn)方法只能通過調(diào)用子類的方法來修改子類本身.

默認(rèn)方法的重寫

假設(shè):

接口A有默認(rèn)方法a,

接口B擴(kuò)展了接口A, 并重寫了方法a

C實(shí)現(xiàn)接口A, 并重寫方法a

D實(shí)現(xiàn)接口B, 并重寫方法a

沒有重寫的情況

一個(gè)類實(shí)現(xiàn)接口A, 則會(huì)調(diào)用接口A的實(shí)現(xiàn)

一個(gè)類實(shí)現(xiàn)接口B, 則會(huì)調(diào)用接口B的實(shí)現(xiàn)

繼承于C D的類, 無論是否實(shí)現(xiàn)了接口AB, 都將會(huì)調(diào)用C D的實(shí)現(xiàn)

實(shí)現(xiàn)AB, 但沒有繼承CD的類將無法通過編譯

有重寫的情況

無論繼承情況如何, 只要重寫了默認(rèn)方法, 都將調(diào)用自己的實(shí)現(xiàn)

三定律

類勝于接口

子類勝于父類

沒有規(guī)則三, 如果上面兩條不適用, 子類需要實(shí)現(xiàn)該方法, 或聲明為抽象方法

接口的靜態(tài)方法

如果一個(gè)方法有充分的語義原因和某個(gè)概念相關(guān), 那么就應(yīng)該將方法和相關(guān)的類或接口放在一起, 而不是放到另一個(gè)工具類中. 基于這個(gè)原因, Java 8提供了接口的靜態(tài)方法的支持. Stream接口中就包含多個(gè)靜態(tài)方法用于生成Stream對(duì)象.

Optional

Optional是為核心類庫新設(shè)計(jì)的一個(gè)數(shù)據(jù)類型, 用于替換null值. 它可以接收一個(gè)泛型參數(shù).

調(diào)用get方法獲得泛型類型的對(duì)象.

isPresent方法判斷是否為空

orElse orElseGet orElseThrow方法可以自由定制為空時(shí)的返回值/拋出異常

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66619.html

相關(guān)文章

  • Java 8 函數(shù)編程讀書筆記——數(shù)據(jù)并行化

    摘要:限制編寫并行流,存在一些與非并行流不一樣的約定。底層框架并行流在底層沿用的框架,遞歸式的分解問題,然后每段并行執(zhí)行,最終由合并結(jié)果,返回最后的值。 本書第六章的讀書筆記,也是我這個(gè)系列的最后一篇讀書筆記。后面7、8、9章分別講的測(cè)試、調(diào)試與重構(gòu)、設(shè)計(jì)和架構(gòu)的原則以及使用Lambda表達(dá)式編寫并發(fā)程序,因?yàn)楣P記不好整理,就不寫了,感興趣的同學(xué)自己買書來看吧。 并行化流操作 關(guān)于并行與并發(fā)...

    leone 評(píng)論0 收藏0
  • java 8 實(shí)戰(zhàn)》讀書筆記 -第十四章 函數(shù)編程的技巧

    摘要:但是,最好使用差異化的類型定義,函數(shù)簽名如下其實(shí)二者說的是同一件事。后者的返回值和初始函數(shù)的返回值相同,即。破壞式更新和函數(shù)式更新的比較三的延遲計(jì)算的設(shè)計(jì)者們?cè)趯⒁霑r(shí)采取了比較特殊的方式。四匹配模式語言中暫時(shí)并未提供這一特性,略。 一、無處不在的函數(shù) 一等函數(shù):能夠像普通變量一樣使用的函數(shù)稱為一等函數(shù)(first-class function)通過::操作符,你可以創(chuàng)建一個(gè)方法引用,...

    nemo 評(píng)論0 收藏0
  • Java 8 函數(shù)編程讀書筆記——lambda表達(dá)

    摘要:本文是函數(shù)式編程第二章的讀書筆記。的語法簡(jiǎn)化了使用匿名內(nèi)部類時(shí)的模板代碼,讓程序員專注于編寫想要執(zhí)行的行為,也讓代碼更加簡(jiǎn)潔易讀。中最重要的函數(shù)接口類型推斷為新成員表達(dá)式提供了類型推斷的支持,在不需要聲明參數(shù)類型的表達(dá)式中表現(xiàn)的有為明顯。 本文是「Java 8 函數(shù)式編程」第二章的讀書筆記。 Lambda引入的變化 Lambda表達(dá)式,是一種緊湊的、傳遞行為的方式,從編程思想上來講,...

    lx1036 評(píng)論0 收藏0
  • Java 8 函數(shù)編程讀書筆記——流

    摘要:本文是函數(shù)式編程第三章的讀書筆記,章名為流。正確使用表達(dá)式明確要達(dá)成什么轉(zhuǎn)化,而不是說明如何轉(zhuǎn)化沒有副作用只通過函數(shù)的返回值就能充分理解函數(shù)的全部作用函數(shù)不會(huì)修改程序或外界的狀態(tài)獲取值而不是變量避免使用數(shù)組逃過的追殺,應(yīng)該考慮優(yōu)化邏輯 本文是「Java 8 函數(shù)式編程」第三章的讀書筆記,章名為流。本章主要介紹了外部迭代與內(nèi)部迭代以及常用的高階函數(shù)。 外部迭代與內(nèi)部迭代 外部迭代 過去我...

    qpwoeiru96 評(píng)論0 收藏0
  • java 8 實(shí)戰(zhàn)》讀書筆記 -第十三章 函數(shù)的思考

    摘要:當(dāng)我們希望能界定這二者之間的區(qū)別時(shí),我們將第一種稱為純粹的函數(shù)式編程,后者稱為函數(shù)式編程。函數(shù)式編程我們的準(zhǔn)則是,被稱為函數(shù)式的函數(shù)或方法都只能修改本地變量。另一種觀點(diǎn)支持引用透明的函數(shù)式編程,認(rèn)為方法不應(yīng)該有對(duì)外部可見的對(duì)象修改。 一、實(shí)現(xiàn)和維護(hù)系統(tǒng) 1.共享的可變數(shù)據(jù) 如果一個(gè)方法既不修改它內(nèi)嵌類的狀態(tài),也不修改其他對(duì)象的狀態(tài),使用return返回所有的計(jì)算結(jié)果,那么我們稱其為純粹...

    Donne 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<