讀Java8函數式編程筆記04_類庫

来源:https://www.cnblogs.com/lying7/archive/2023/01/29/17071692.html
-Advertisement-
Play Games

*以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「englyf」https://mp.weixin.qq.com/s/2GFLTstDC7w6u3fTJxflNA 本文大概 1685 個字,閱讀需花 6 分鐘內容不多, 但也花了一些精力如要交流, 歡迎關註我然後評論區留言 謝謝你的 ...


1. 預設方法

1.1. 介面中定義的包含方法體的方法,方法名有default關鍵字做首碼

1.1.1. 在任何介面中,無論函數介面還是非函數介面,都可以使用該方法

1.2. Collection介面

1.2.1. stream方法

1.3. Iterable介面

1.3.1. forEach方法

1.4. 虛方法

1.5. 類中重寫的方法優先順序高於介面中定義的預設方法

1.5.1. 能簡化很多繼承問題

1.5.2. 任何時候,一旦與類中定義的方法產生衝突,都要優先選擇類中定義的方法

1.5.3. 如果類中重寫的方法沒有預設方法的優先順序高,那麼就會破壞已有的實現

1.5.4. 為了在介面上向後相容

2. 介面的靜態方法

2.1. Stream.of

2.2. Stream.range

2.3. Stream.iterate

3. 改變了人們認識類庫的方式,介面中的方法也可以包含代碼體

4. 函數介面的方法

4.1. 使用Predicate,調用test方法

4.2. 使用Function,調用apply方法

5. 基本類型

5.1. int

5.2. 內建在語言和運行環境中

5.3. 基本的程式構建模塊

6. 裝箱類型

6.1. Integer

6.2. 普通的Java類

6.3. 對基本類型的一種封裝

7. 在最壞的情況下,同樣大小的數組,Integer[]要比int[]多占用6倍記憶體

8. 裝箱

8.1. 將基本類型轉換為裝箱類型

9. 拆箱

9.1. 將裝箱類型轉換為基本類型

10. Stream類特殊處理的基本類型

10.1. IntStream

10.2. DoubleStream

10.3. LongStream

10.4. summaryStatistics方法

10.4.1. min

10.4.2. max

10.4.3. average

10.4.4. sum

11. BinaryOperator

11.1. 一種特殊的BiFunction類型

11.2. 參數的類型和返回值的類型相同

12. 目標類型推導規則

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

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

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

13. @FunctionalInterface

13.1. 每個用作函數介面的介面都應該添加這個註釋

13.2. Java中有一些介面,雖然只含一個方法,但並不是為了使用Lambda表達式來實現的

13.3. 關閉資源是更改狀態的另一種形式

13.4. 該註釋添加給一個枚舉類型、類或另一個註釋,或者介面包含不止一個抽象方法,javac就會報錯

13.4.1. 重構代碼時,使用它能很容易發現問題

14. 多重繼承

14.1. 使用super關鍵字是指向父類

14.2. InterfaceName.super這樣的語法指的是繼承自父介面的方法

15. 三定律

15.1. 類勝於介面。如果在繼承鏈中有方法體或抽象的方法聲明,那麼就可以忽略介面中定義的方法

15.1.1. 為了讓代碼向後相容

15.2. 子類勝於父類。如果一個介面繼承了另一個介面,且兩個介面都定義了一個預設方法,那麼子類中定義的方法勝出

15.3. 如果上面兩條規則不適用,子類要麼需要實現該方法,要麼將該方法聲明為抽象方法

16. 介面和抽象類的區別

16.1. 介面允許多重繼承,卻沒有成員變數

16.2. 抽象類可以繼承成員變數,卻不能多重繼承

17. Optional

17.1. 在一個值可能為空的建模情況下,使用Optional對象能替代使用null值

17.2. 為核心類庫新設計的一個數據類型,用來替換null值

17.2.1. 使用null代表值不存在的最大問題在於NullPointerException

17.3. Optional對象鼓勵程式員適時檢查變數是否為空,以避免代碼缺陷

17.4. 它將一個類的API中可能為空的值文檔化,這比閱讀實現代碼要簡單很多

17.5. 方法

17.5.1. get

17.5.2. orElse

17.5.2.1. 當Optional對象為空時,該方法提供了一個備選值

17.5.3. orElseGet

17.5.3.1. 接受一個Supplier對象,只有在Optional對象真正為空時才會調用

17.5.4. empty

17.5.5. ofNullable

17.5.5.1. 將一個空值轉換成Optional對象

17.5.6. isPresent

17.5.6.1. 一個Optional對象里是否有值


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 每當有新員工入職,人事小姐姐都要收集大量的工資卡信息,並且生成Excel文檔,看到小姐姐這麼辛苦,我就忍不住要去幫她了… 於是我用1行代碼就實現了自動識別銀行卡信息並且自動生成Excel文件,小姐姐當場就亮眼汪汪的看著我,搞得我都害羞了~ 第一步:識別一張銀行卡 識別銀行卡的代碼最簡單,只需要1行騰 ...
  • 1. 基礎知識 1.1 基本配置 main # 全局配置 events { # nginx 工作模式配置 } http { # http 設置 .... server { # 伺服器主機配置 .... location { # 路由配置 .... } location path { .... } l ...
  • 本文結合京東監控埋點場景,對解決樣板代碼的技術選型方案進行分析,給出最終解決方案後,結合理論和實踐進一步展開。通過關註文中的技術分析過程和技術場景,讀者可收穫一種樣板代碼思想過程和解決思路,並對Java編譯器底層有初步瞭解。 ...
  • 在golang中可以使用a := b這種方式將b賦值給a,只有當b能進行深拷貝時a與b才不會互相影響,否則就需要進行更為複雜的深拷貝。 下麵就是Go賦值操作的一個說明: Go語言中所有賦值操作都是值傳遞,如果結構中不含指針,則直接賦值就是深度拷貝;如果結構中含有指針(包括自定義指針,以及切片,map ...
  • 第一種方式:使用{} firstDict = {"name": "wang yuan wai ", "age" : 25} 說明:{}為創建一個空的字典對象 第二種方式:使用fromkeys()方法 second_dict = dict.fromkeys(("name", "age")) #valu ...
  • 如果您想查找高於或低於平均值的數字,可以不必計算該平均值,就能查看更高或更低的值。通過Java應用程式,可以自動突出顯示這些數字。除了快速突出顯示高於或低於平均值的值外,您還可以查看高於或低於的值的個數。現在讓我們看看如何在 Java應用程式中實現此操作。 引入jar包 導入方法1: 手動引入。將  ...
  • 幾乎所有的高級編程語言都有自己的垃圾回收機制,開發者不需要關註記憶體的申請與釋放,Python 也不例外。Python 官方團隊的文章 https://devguide.python.org/internals/garbage-collector 詳細介紹了 Python 中的垃圾回收演算法,本文是這篇 ...
  • 在新版本的pandas中,上述代碼會引起警告,建議改成SQLAlchemy connectable(engine/connection),後續代碼將引入這種升級的連接方式。 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...