Effective Java Item 45:謹慎使用 streams

整理 Effective Java 書中 Item 45: Use streams judiciously 心得筆記

主旨

Java 8 推出的 streams API 是用來處理「大量資料的處理流程」的工具,它支援類似函式式的操作(例如 map、filter、collect 等),並能以流暢的語法串接多個處理階段。然而,streams 是一把雙面刃:用得好能讓程式簡潔清楚,用不好會讓人看不懂又難維護。

本篇要講的重點就是:該用的時候再用,避免過度使用。

點出問題

stream pipeline 可以寫得很精簡,例如:

Read more

Effective Java Item 44:用標準函式介面

整理 Effective Java 書中 Item 44: Use standard functional interfaces 心得筆記

主旨:學會選擇正確的標準函式介面

從 Java 8 開始,因為 lambda 的加入,我們寫 API 的思維也隨之改變。如果你需要傳入一段行為(function object),不再需要額外建立匿名類別,而是可以用 lambda 寫得更簡潔。但要寫出真正好用的 API,選對函式介面更是關鍵——盡可能用 Java 內建的標準函式介面,能讓程式碼更直觀、可讀性更高,也方便 IDE 自動補全與檢查。

點出問題:不該每次都自創介面

假設你想要建立一個可限制最大筆數的快取,會用 LinkedHashMap 來實作,並覆寫 removeEldestEntry()

Read more

Effective Java Item 43:用方法參考取代 Lambda

整理 Effective Java 書中 Item 43: Prefer method references to lambdas 心得筆記

主旨

Java 8 推出 Lambda 表達式後,大大減少了匿名類別帶來的冗長語法。不過其實 Java 還有更簡潔的選擇,那就是「方法參考」(Method Reference)。這種語法讓我們可以直接把現有的方法當作函式物件來用,省去命名參數和撰寫邏輯的麻煩。本篇將說明方法參考的用法、優勢,以及在什麼情況下優先使用。

Read more

Effective Java Item 42:偏好使用 Lambda 表達式取代匿名類別

整理 Effective Java 書中 Item 42: Prefer lambda expressions to anonymous classes 心得筆記

主旨

在 Java 8 之前,若要實作一個函式物件(function object),通常會使用匿名類別。但寫法冗長、閱讀不易。Java 8 引入 Lambda 表達式後,可以用更簡潔的語法來表示這些功能。這篇文章會說明為什麼你應該「偏好使用 Lambda」,並補充 Lambda 和匿名類別的異同、注意事項,以及何時該避免使用 Lambda。

Read more

Effective Java Item 41:用標記介面定義類型

整理 Effective Java 書中 Item 41: Use marker interfaces to define types 心得筆記

主旨

標記介面(Marker Interface)是沒有任何方法的介面,只是單純用來代表一個「型別」。雖然 Java 也可以用標註(annotation)來達到類似效果,但在要表示「某類型具備某種能力」時,還是推薦使用標記介面,因為它可以帶來更強的型別安全與語意明確性。

Read more