如何使用流改進 Java 程式碼
來源:
Dev.to
什麼是流?
Streams 首次出現在 Java 8 中。根據 Oracle 文檔,它們是用於支援元素流上的函數式操作的類,例如集合上的映射縮減轉換。簡單來說,流由一個資料來源、零個或多個中間操作和一個終端操作組成。
什麼是資料來源?
- 集合、列表、集合、整數、長整數、雙精確度數、陣列、文件行。
什麼是中間操作?
- 過濾、映射、排序等
- 這些操作會傳回一個 Stream,以便它們可以連結到其他操作。
什麼是終端操作?
- ForEach、collect、reduce、findFirst 等
- 它們傳回無效或非流結果。
- 如果執行緒沒有終止操作,則不會呼叫中間體。
讓我們使用 Streams 將函數從命令式風格轉換為聲明式風格
命令式功能(無流):
private int getResult_imperative(List<String> strings) {
int result = 0;
for (String string : strings){
if(isDigit(string.charAt(0))) continue;
if (string.contains("_")) continue;
result += string.length();
}
return result;
}
在這裡我們注意到我們需要手動執行一些操作:
- 聲明一個結果變數來追蹤結果。
- 循環遍歷字串。
- 編寫兩個if語句(這可能比本例複雜得多)。
- 將每個的長度加到結果中。
讓我們檢查一下聲明式風格(Streams):
private int getResult_Declarative(List<String> strings){
return strings.
stream().
filter(s -> !isDigit(s.charAt(0))).
filter(s -> !s.contains("_")).
mapToInt(String::length).
sum();
}
那麼有什麼差別呢?
- 我們透過呼叫stream()函數來獲得一個Stream物件。
- (中間運算)我們使用過濾函數兩次 - 每次我們指定一個條件,該條件必須僅由我們想要在下一階段移動到的那些元素滿足。
- (中間操作)我們透過呼叫length方法(使用方法引用樣式)將每個String物件對應到int。
- (終端操作)將所有先前的int值相加。
觀察結果
第二種方法是不是看起來比較簡單?我們表明了
我們想要什麼,而不是我們想如何做。這就是聲明式程式設計的精神,也是現代 Java 應用程式中 Stream API 的目標。
五個面向 Java 開發人員的最佳 IntelliJ IDEA 插件
來源:
GitHub插件在定期處理程式碼時在許多情況下都非常有用。它們能夠擴展核心功能、提供各種整合並支援許多任務的自動化。以下是我認為最好的插件:
聲納林特
SonarLint 可讓您在編寫程式碼時修復錯誤和漏洞。它會即時突出顯示編碼問題,為開發人員提供如何修復這些問題的清晰說明,以便您可以在提交程式碼之前修復它們。這個插件是必要的,因為它極大地改進了編碼。
Maven 助手
我希望你正在使用 Maven?我願意!Maven Helper 插件提供:
- 分析和消除衝突依賴關係的簡單方法;
- 找到直接或傳遞依賴關係的簡單方法;
- 為包含目前檔案的模組或根模組執行/調試 Maven 目標的步驟;
- 在 Maven 模組的目前路徑上開啟終端的操作;
- 運行/調試當前測試文件的操作。如果 maven-surefire-plugin 配置為跳過或排除測試,則將使用「驗證」目標。各種配置樣式可以在 GitHub 上找到。
程式碼度量
該外掛程式具有基於 Java 文件的自訂難度計算的選項卡指示器。它們在類別和方法中為開發人員提供提示,以便他可以輕鬆確定需要檢查的內容。儘管這不是標準度量,但它非常接近
圈複雜度。您也可以透過變更適當的配置條目來自訂項目的複雜度計算。
字串操作
大小寫切換、排序、過濾、縮放、列對齊、grepping、轉義、編碼等等...
JPA 好友
JPA Buddy 讓與 JPA 相關的一切變得簡單又快速。它提供了幫助您使用 Hibernate、Spring Data JPA、Liquibase、Flyway 的工具。
JPA Buddy 的主要特點:
- JPA 實體:建立和編輯實體、實體屬性、生命週期回呼、索引和約束。支援 JPA 轉換器和 Hibernate 自訂類型。能夠對實體使用 Lombok 註解。
- 為 JPA 實體建立 equals、hashCode 和 toString 方法的正確實作。
- JPA 實體聲明的原始碼意圖、檢查和快速修復。
- 在持久單元節點下的 JPA 結構面板中以圖形方式顯示實體關係。
- 自動產生 Liquibase 變更日誌和 Flyway 版本遷移:資料庫到資料庫、模型到資料庫、模型到快照比較。
- Visual Liquibase 變更日誌設計器和編碼說明:建立和編輯專案、參考表名稱、列名稱、包含檔案等。
- 操作:建立 Liquibase 快照,執行指令「Liquibase update」和「Liquibase updateSQL」。
- Spring Data Repositories:建立儲存庫、建立儲存庫方法、編輯方法屬性、基於實體類別建立投影、提取 JPQL 查詢。
- Kotlin:所有視覺設計師完全支援 Kotlin 物件和儲存庫的程式碼產生。
我說的是前五個插件,但我還有一個...
額外的圖標
這是一個圖示集合,新增了 Markdown、Yaml、Maven、Git 等檔案的捷徑。您會習慣它們,因為它們可以幫助您輕鬆識別文件。你肯定會需要它們。
GO TO FULL VERSION