Eclipse Collections的API設計演進
Eclipse Collections是一個開源Java集合框架,可以用Java編寫功能齊全,流暢的程式碼,這篇文章解釋了成熟Java集合庫的演化策略:
歷史
Eclipse Collections於2004年在Goldman Sachs開始作為一個名為Caramel的集合框架開始,在2012年,它作為一個名為GS Collections的專案開放給GitHub。多年來,大約40名來自同一公司的開發人員為集合框架做出了貢獻。為了最大限度地發揮開源專案的最佳性質,GS Collections被遷移到Eclipse Foundation,在2015年重新命名為Eclipse Collections。現在該框架對社群完全開放,接受貢獻!
設計目標
Eclipse Collections旨在提供豐富,功能,流暢和有趣的API以及記憶體高效的資料結構,同時提供與Java Collections的互操作性。它提供了缺失的型別,如Bag,Multimap,Stack,BiMap,Interval。
框架的演變
在過去14年多的時間裡,框架已經成熟,最高介面:RichIterable現在有超過100種方法。經過仔細考慮後,這些方法被包含在介面中。
比如讓我們在Eclipse Collections版本9.0.0中新增的簡單API,實現一個RichIterablecountBy() :
MutableList<String> strings = Lists.mutable.with( "1", "2", "2", "3", "3", "3", "4", "4", "4", "4"); Bag<Integer> integers = strings.collect( Integer::valueOf, Bags.mutable.empty()); Assert.assertEquals(1, integers.occurrencesOf(1)); Assert.assertEquals(2, integers.occurrencesOf(2)); Assert.assertEquals(3, integers.occurrencesOf(3)); Assert.assertEquals(4, integers.occurrencesOf(4)); |
上面計算整數的解決方案是有效的,但是,它並不直觀。沒有經驗的開發人員可能很難實現此解決方案。因此,我們決定新增countBy(),現在程式碼看起來更實用,更流暢,更直觀。
MutableList<String> strings = Lists.mutable.with( "1", "2", "2", "3", "3", "3", "4", "4", "4", "4"); Bag<Integer> integers = strings.countBy(Integer::valueOf); Assert.assertEquals(1, integers.occurrencesOf(1)); Assert.assertEquals(2, integers.occurrencesOf(2)); Assert.assertEquals(3, integers.occurrencesOf(3)); Assert.assertEquals(4, integers.occurrencesOf(4)); |
相關文章
- API 演進的正確方式API
- RocketMQ 5.0 API 與 SDK 的演進MQAPI
- 愛奇藝平臺的架構設計與演進之路架構
- Button 的 "進化之旅" | 我們是如何設計 Compose API 的API
- 小米自動化運維平臺演進設計思路運維
- 商家下載中心設計演進之路|得物技術
- WebRTC 1.0 之後,那些 WebRTC API 還將發生的演進WebAPI
- 硬核 - Java 隨機數相關 API 的演進與思考(上)Java隨機API
- 新硬體環境下日誌模組的設計與演進
- Http的演進HTTP
- 一步一步演進RESTful API版本 - frankelRESTAPI
- 非同步 API 的設計非同步API
- 使用Collections對list的內容進行排序排序
- API介面設計API
- Collections工具類,可以使用collections工具類對程式碼中的list進行分組
- Java的API設計實踐JavaAPI
- Restful API 的設計規範RESTAPI
- 雲端計算演進與應用
- 架構設計之架構的演變架構
- 【本人禿頂程式設計師】最簡單的設計模式——單例模式的演進和推薦寫法(Java 版)程式設計師設計模式單例Java
- Airbnb的架構演進AI架構
- Serverless 架構的演進Server架構
- laracon 2018 演講《Laravel 當中的程式設計設計模式》筆記Laravel程式設計設計模式筆記
- Eclipse背景設定Eclipse
- restful api設計指南RESTAPI
- 理解RESTful Api設計RESTAPI
- 軟體成分安全分析(SCA)能力的建設與演進
- 好RESTful API的設計原則RESTAPI
- GitHub 的 Restful HTTP API 設計分解GithubRESTHTTPAPI
- 數字生態系統安全演進:軟體供應鏈中的API安全API
- 走進WebApiClientCore的設計WebAPIclient
- 網路 Server 模型的演進Server模型
- jaeger的技術演進之路
- [Flink] Flink 版本特性的演進
- Angular Universal 的演進歷史Angular
- Markdown 版本演進
- 前端演進思考前端
- SSO 方案演進