Java 8 中的方法引用,輕鬆減少程式碼量,提升可讀性!
- 引用特定物件的例項方法
為了演示這種型別的方法引用,我們新建以下這兩個類:
public class Bicycle {
private String brand;
private Integer frameSize;
// standard constructor, getters and setters
}
public class BicycleComparator implements Comparator {
@Override
public int compare(Bicycle a, Bicycle b) {
return a.getFrameSize().compareTo(b.getFrameSize());
}
}
建立一個 BicycleComparator 物件來比較自行車尺寸:
BicycleComparator bikeFrameSizeComparator = new BicycleComparator();
我們可以使用lambda表示式按尺寸大小對自行車進行排序,但需要指定兩個自行車例項進行比較:
createBicyclesList().stream()
.sorted((a, b) -> bikeFrameSizeComparator.compare(a, b));
我們可以使用方法引用讓編譯器把控制程式碼引數傳遞給我們:
createBicyclesList().stream()
.sorted(bikeFrameSizeComparator::compare);
4. 引用特定型別任意物件的例項方法
這種型別的方法引用與前面的示例類似,但不必建立自定義物件來執行比較。
讓我們建立一個要排序的Integer 整數列表:
List numbers = Arrays.asList(5, 3, 50, 24, 40, 2, 9, 18);
如果我們使用經典的 lambda 表示式,這兩個引數都需要顯式傳遞,而使用方法引用則要簡單得多:
numbers.stream()
.sorted((a, b) -> a.compareTo(b));
numbers.stream()
.sorted(Integer::compareTo);
儘管它仍然是一行程式碼,但是方法引用更容易閱讀和理解。
- 引用建構函式
我們可以像在第一個例子中引用靜態方法一樣引用建構函式。唯一區別是需要使用new關鍵字。
現在我們用不同品牌的String列表建立一個Bicycle陣列:
List bikeBrands = Arrays.asList(“Giant”, “Scott”, “Trek”, “GT”);
首先,我們將向Bicycle類新增一個新的建構函式:
public Bicycle(String brand) {
this.brand = brand;
this.frameSize = 0;
}
接下來,我們將使用方法引用中的新建構函式,並從原始的String列表中生成一個Bicycle陣列:
bikeBrands.stream()
.map(Bicycle::new)
.toArray(Bicycle[]::new);
注意如何使用方法引用呼叫Bicycle和Array建構函式,從而使程式碼看起來更加簡潔明瞭。
- 其他示例和限制
目前為止,方法引用是一個使程式碼非常清晰和易讀的好方法。但是,我們不能用它們來代替各種lambda表示式,因為它們有一些侷限性。
它們的主要侷限性是由於它們最大的優點:前一個表示式的輸出需要與引用的方法宣告的輸入引數匹配。
看看這個限制的例子:
createBicyclesList().forEach(b -> System.out.printf(
“Bike brand is ‘%s’ and frame size is ‘%d’%n”,
b.getBrand(),
b.getFrameSize()));
這個簡單的例子不能用方法引用來表示,因為在我們的例子中,printf 方法需要3個引數,而使用createBicyclesList().forEach()只允許方法引用一個引數(Bicycle物件)。
最後,我們研究下,如何建立一個可以從lambda表示式引用的no-operation函式。
在本例中,我們希望使用lambda表示式而不使用其引數。
首先,建立 doNothingAtAll 方法:
private static void doNothingAtAll(Object… o) {
}
因為這是一個varargs方法,它可執行在任意 lambda 表示式中,而不管引用的物件或引數的數量。我們看看它的作用:
createBicyclesList()
.forEach((o) -> MethodReferenceExamples.doNothingAtAll(o));
亞馬遜測評 www.yisuping.com
相關文章
- SOFAStack推出雲原生產品BizStack 可減少30%程式碼量AST
- 在pandas中使用pipe()提升程式碼可讀性
- 前端開發中減少重複勞動,提升效率的方法前端
- 一對一影片直播原始碼,利用列舉提升程式碼的可讀性原始碼
- Java8——方法引用Java
- 減少程式碼中該死的 if else 巢狀巢狀
- 程式碼可讀性隨想
- Java 中的方法引用Java
- 論減少程式碼中return語句的騷操作
- [譯] 使用多重賦值與元組解包提升 Python 程式碼的可讀性賦值Python
- 使用java8的方法引用替換硬編碼Java
- java8(二)方法引用Java
- 程式碼質量第 3 層 - 可讀的程式碼
- 『 效率工具 』Spring Boot版的輕量級程式碼生成器,減少70%以上的開發任務Spring Boot
- 使用JSDoc提高程式碼的可讀性JS
- 減少運維工作量,如何透過 ROS 輕鬆實現資源編排新方式運維ROS
- Java 8 新特性之方法引用Java
- 輕鬆搞懂Java中的自旋鎖Java
- 程式碼行數越多可讀性越好?
- 輕鬆看懂Java位元組碼Java
- Java 列舉(Enums)解析:提高程式碼可讀性與易維護性Java
- Optional簡化空值判斷,減少程式碼中的if-else程式碼塊
- Java中的方法引用詳解Java
- 提升程式碼管理效率,Cornerstone 4 for Mac助您輕鬆駕馭版本控制Mac
- Vue 減少和服務端互動的樣板程式碼一種方法Vue服務端
- Java開發中存在這樣的程式碼,反而影響整體整潔和可讀性Java
- java8 新特性之方法引用Java
- if else 太多?看我用 Java 8 輕鬆幹掉!Java
- 掌握C語言指標,輕鬆解鎖程式碼高效性與靈活性(中)C語言指標
- 掌握這些程式碼安全檢視方法,提升你的程式碼質量
- Python中的物件引用、可變性和垃圾回收Python物件
- 想要在 PDF 中插入或者減少幾頁?這兩個功能配合使用,輕鬆完成繁瑣操作
- 讓程式碼具有可讀性的10種最佳實踐
- 如何輕鬆地為EA建立程式碼生成器 -DZone JavaJava
- 地中海飲食加上定期鍛鍊和減少卡路里攝入可減少腹部脂肪和保持肌肉質量
- Airtest指令碼的重構與最佳化:提升測試效率和可讀性AI指令碼
- Excel技巧提升:輕鬆玩轉格式Excel
- 一鍵搞定!輕鬆更改遠端桌面3389埠,提升安全性!