Effective Java~43. 方法引用优于Lambda
Java 提供了一種生成函數(shù)對象的方法,比 lambda 還要簡潔,那就是:方法引用( method references)。下面是一段程序代碼片段,它維護(hù)一個從任意鍵到整數(shù)值的映射。如果將該值解釋為鍵的實例個數(shù),則該程序是一個多重集合的實現(xiàn)。該代碼的功能是,根據(jù)鍵找到整數(shù)值,然后在此基礎(chǔ)上加1:
map.merge(key, 1, (count, incr) -> count + incr);
從 Java 8 開始, Integer 類(和所有其他包裝數(shù)字基本類型)提供了一個靜態(tài)方法總和,和它完全相同。
????????許多方法引用是指靜態(tài)方法,但有 4 種方法沒有引用靜態(tài)方法。 其中兩個 Lambda 等式是特定(bound)和任意(unbound)對象方法引用。 在特定對象引用中,接收對象在方法引用中指定。 特定對象引用在本質(zhì)上與靜態(tài)引用類似:函數(shù)對象與引用的方法具有相同的參數(shù)。 在任意對象引用中,接收對象在應(yīng)用函數(shù)對象時通過方法的聲明參數(shù)之前的附加參數(shù)指定。 任意對象引用通常用作流管道(pipelines)中的映射和過濾方法(條目 45)。 最后,對于類和數(shù)組,有兩種構(gòu)造方法引用。 構(gòu)造方法引用用作工廠對象。 下表總結(jié)了所有五種方法引用:
| 方法引用類型 Method Ref Type | 舉例 Example | Lambda 等式 Lambda Equivalent |
| Static | Integer::parseInt | str -> Integer.parseInt(str) |
| Bound | Instant.now()::isAfter | Instant then = Instant.now(); t -> then.isAfter(t) |
| Unbound | String::toLowerCase | str -> str.toLowerCase() |
| Class Constructor | TreeMap<K, V>::new | () -> new TreeMap<K, V> |
| Array Constructor | int[]::new | len -> new int[len] |
????????總之,方法引用通常為 lambda 提供一個更簡潔的選擇。 如果方法引用看起來更簡短更清晰,請使用它們;否則,還是堅持 lambda。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Effective Java~43. 方法引用优于Lambda的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts2中用interceptor
- 下一篇: Java并发编程实战~Immutabil