国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

MingjunYang / 609人閱讀

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

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

基本類型

考慮到裝箱類型過于占用內存, JDK提供了針對基本類型的操作, 以達到優化的效果, 如mapToLong方法.

對基本類型做特殊處理的方法在命名上有明確規范:

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

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

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

summaryStatistics方法

這些為基本類型進行優化的Stream還有一些額外的方法, 避免重復實現一些通用方法, 比如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表達式作為參數時, 其類型由它的目標類型(方法的參數類型)推導得出, 推導過程遵循如下規則:

如果只有一個可能的目標類型, 由相應函數接口里的參數類型推導得出

如果有多個可能的目標類型, 由最具體的類型推導得出

如果有多個可能的目標類型且最具體的類型不明確, 則需要人為指定類型

@FunctionalInterface

該注解會強制javac檢查一個接口是否符合函數接口的標準. 如果該注解被添加給一個枚舉類型, 類或者另一個注解, 或者接口包含不止一個抽象方法, javac就會報錯.

默認方法 產生原因

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

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

編寫方法

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

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

因為接口沒有成員變量, 所以默認方法只能通過調用子類的方法來修改子類本身.

默認方法的重寫

假設:

接口A有默認方法a,

接口B擴展了接口A, 并重寫了方法a

C實現接口A, 并重寫方法a

D實現接口B, 并重寫方法a

沒有重寫的情況

一個類實現接口A, 則會調用接口A的實現

一個類實現接口B, 則會調用接口B的實現

繼承于C D的類, 無論是否實現了接口AB, 都將會調用C D的實現

實現AB, 但沒有繼承CD的類將無法通過編譯

有重寫的情況

無論繼承情況如何, 只要重寫了默認方法, 都將調用自己的實現

三定律

類勝于接口

子類勝于父類

沒有規則三, 如果上面兩條不適用, 子類需要實現該方法, 或聲明為抽象方法

接口的靜態方法

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

Optional

Optional是為核心類庫新設計的一個數據類型, 用于替換null值. 它可以接收一個泛型參數.

調用get方法獲得泛型類型的對象.

isPresent方法判斷是否為空

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66619.html

相關文章

  • Java 8 函數編程讀書筆記——數據并行化

    摘要:限制編寫并行流,存在一些與非并行流不一樣的約定。底層框架并行流在底層沿用的框架,遞歸式的分解問題,然后每段并行執行,最終由合并結果,返回最后的值。 本書第六章的讀書筆記,也是我這個系列的最后一篇讀書筆記。后面7、8、9章分別講的測試、調試與重構、設計和架構的原則以及使用Lambda表達式編寫并發程序,因為筆記不好整理,就不寫了,感興趣的同學自己買書來看吧。 并行化流操作 關于并行與并發...

    leone 評論0 收藏0
  • java 8 實戰》讀書筆記 -第十四章 函數編程的技巧

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

    nemo 評論0 收藏0
  • Java 8 函數編程讀書筆記——lambda表達

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

    lx1036 評論0 收藏0
  • Java 8 函數編程讀書筆記——流

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

    qpwoeiru96 評論0 收藏0
  • java 8 實戰》讀書筆記 -第十三章 函數的思考

    摘要:當我們希望能界定這二者之間的區別時,我們將第一種稱為純粹的函數式編程,后者稱為函數式編程。函數式編程我們的準則是,被稱為函數式的函數或方法都只能修改本地變量。另一種觀點支持引用透明的函數式編程,認為方法不應該有對外部可見的對象修改。 一、實現和維護系統 1.共享的可變數據 如果一個方法既不修改它內嵌類的狀態,也不修改其他對象的狀態,使用return返回所有的計算結果,那么我們稱其為純粹...

    Donne 評論0 收藏0

發表評論

0條評論

MingjunYang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<