讀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
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...