移位操作提高代码的可读性_本地记录或类,以提高流操作的可读性
移位操作提高代碼的可讀性
Java 14帶有Records的預覽語言功能—一種特殊的輕量級類,可以與其他語言中的類似構造進行比較,例如C#中的record類,Kotlin中的data類和Scala中的case類。
A)已經有許多博客文章解釋Java 14記錄,B)大量文章將記錄的用法與Project Lombok的@Value (用于創建不可變的類)進行了比較,因此在此我不再贅述。 😉
Brian Goetz在JEP 384:記錄中進行了解釋(第二,預覽它們背后的動機和規則,例如對記錄聲明的限制以及與“正常”類的相似性。
我注意到了當地的記錄 :
產生和使用記錄的程序可能會處理許多本身就是簡單變量組的中間值。 聲明記錄以對那些中間值建模通常會很方便。 一種選擇是聲明靜態且嵌套的“幫助程序”記錄,就像今天許多程序聲明幫助程序類一樣。 一個更方便的選擇是在方法內部聲明一條記錄,該記錄靠近操縱變量的代碼。 因此,該JEP提出了類似于本地類的傳統構造的本地記錄。
在以下示例中,將使用本地記錄MerchantSales對商人和每月銷售額的匯總進行建模。 使用此記錄可提高以下流操作的可讀性:
攝影:Dominika Roseclay。下面的MerchantSales是一個可變的元組,既包含單個Merchant又包含在處理流時計算的銷售額。 我們需要同時捕獲兩者 ,以便能夠對計算出的銷售額進行排序 ,但最終返回該銷售額的(原始)商人。
List<Merchant> findTopMerchants(List<Merchant> merchants, int month) { // Local record record MerchantSales(Merchant merchant, double sales) {} return merchants.stream() .map(merchant -> new MerchantSales(merchant, computeSales(merchant, month))) .sorted((m1, m2) -> Double.compare(m2.getSales(), m1.getSales())) .map(MerchantSales::getMerchant) .collect(toList()); }這是在方法中定義的記錄這一事實使它成為本地記錄,我可以立即認識到在許多Stream API情況下的優勢,在這種情況下,流需要累積許多分組在一起的值:如示例所示,映射X,計算或生成Y并在流中的后續步驟中同時保留兩者。
當然,在所有這些情況下,我顯然都通過引入了輔助POJO或重新設計了整個流邏輯來解決了這一問題,但是閱讀JEP使我記住Java支持局部類 (不是記錄 ;我的意思是普通類 )。從一開始就差不多。
局部類是非靜態的,因為它們可以訪問封閉塊的實例成員。
本地記錄和本地(內部)類增加了封裝的使用。 您無需使類型在創建它的塊之外更廣泛地可用。
這是本地類的示例。 我正在使用Lombok的@Data生成必需的參數構造函數和getters / setter,以保持較少冗長的精神,但是您始終可以使用純原始Java。
List<Merchant> findTopMerchants(List<Merchant> merchants, int month) { // Local class @Data class MerchantSales { final Merchant merchant; final double sales; } return merchants.stream() .map(merchant -> new MerchantSales(merchant, computeSales(merchant, month))) .sorted((m1, m2) -> Double.compare(m2.getSales(), m1.getSales())) .map(MerchantSales::getMerchant) .collect(toList()); }因此,當尚未使用Java 14時,或者無法啟用記錄預覽功能時,可以始終使用本地類來提高流操作的可讀性。
51.825217
5.812153
奈梅亨,荷蘭
翻譯自: https://www.javacodegeeks.com/2020/06/local-records-or-classes-to-improve-the-readability-of-stream-operations.html
移位操作提高代碼的可讀性
總結
以上是生活随笔為你收集整理的移位操作提高代码的可读性_本地记录或类,以提高流操作的可读性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maple软件怎么读(maple怎么读?
- 下一篇: serv-u 数据备份_如何使用用户数据