日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Eclipse Collections:让Java Streams更上一层楼

發(fā)布時間:2025/7/14 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Eclipse Collections:让Java Streams更上一层楼 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
\

關(guān)鍵要點(diǎn)

\\
  • Eclipse Collections是一個高性能的Java集合框架,為原生JDK集合增加了豐富的功能。\\t
  • Streams是JDK的一個非常受歡迎的功能,但它缺少了一些特性,嚴(yán)重依賴舊版的集合實(shí)現(xiàn)和冗長的API。\\t
  • Eclipse Collections為傳統(tǒng)JDK數(shù)據(jù)結(jié)構(gòu)提供了替代品,并支持Bag和Multimap等數(shù)據(jù)結(jié)構(gòu)。\\t
  • 將Streams重構(gòu)為Eclipse Collections有助于提高代碼可讀性并減少內(nèi)存占用。\\t
  • 最重要的是,使用Eclipse Collections來重構(gòu)Streams非常簡單!\
\\

在Java 8中引入的Java Streams非常棒——讓我們可以充分利用lambda表達(dá)式來替換循環(huán)迭代代碼,讓代碼更加接近于函數(shù)式編程風(fēng)格。

\\

然而,盡管Streams帶來了改進(jìn),但它最終只是對現(xiàn)有集合框架的擴(kuò)展,仍然背著很多包袱。

\\

我們可以進(jìn)一步改進(jìn)嗎?我們能否擁有更豐富的接口和更清晰、更易讀的代碼?與傳統(tǒng)的集合相比,我們能否節(jié)省更多內(nèi)存?我們能否更好、更無縫地支持函數(shù)式編程?

\\

答案是肯定的!Eclipse Collections(以前叫作GS Collections)是Java Collections框架的一個替代品,我們可以用它來實(shí)現(xiàn)我們的目的。

\\

在本文中,我們將演示幾個例子,將標(biāo)準(zhǔn)的Java代碼重構(gòu)成Eclipse Collections數(shù)據(jù)結(jié)構(gòu)和API,以及如何節(jié)省內(nèi)存。

\\

這里將會有很多代碼示例,它們將展示如何將使用標(biāo)準(zhǔn)Java集合和Streams的代碼改為使用Eclipse Collection框架的代碼。

\\

在深入研究代碼之前,我們將花一些時間來了解Eclipse Collections是什么、我們?yōu)槭裁葱枰?#xff0c;以及為什么需要將慣用的Java重構(gòu)成Eclipse Collections。

\\\

Eclipse Collections的歷史

\\

Eclipse?Collections最初是由高盛公司創(chuàng)建的,他們的應(yīng)用平臺有一個大型的分布式緩存組件。該系統(tǒng)將數(shù)百GB的數(shù)據(jù)存儲在內(nèi)存中(現(xiàn)在仍在生產(chǎn)環(huán)境運(yùn)行)。

\\

事實(shí)上,緩存就是一個Map,我們在Map里保存和讀取對象。這些對象可以包含其他Map和集合。最初,緩存基于java.util.*包中的標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)而構(gòu)建。但很明顯,這些集合有兩個明顯的缺點(diǎn):內(nèi)存使用效率低下,而且接口非常有限(導(dǎo)致重復(fù)且難以閱讀的代碼)。由于問題源于集合的實(shí)現(xiàn),因此無法通過額外的代碼庫來解決這些問題。為了同時解決這兩個問題,高盛公司決定從頭開始創(chuàng)建一個新的集合框架。

\\

在當(dāng)時,它似乎是一個激進(jìn)的解決方案,不過它確實(shí)可行。現(xiàn)在,這個框架托管給了Eclipse基金會。

\\

在文章的最后,我們分享了一些鏈接,這些鏈接將幫助你了解有關(guān)這個項(xiàng)目本身的更多信息、學(xué)習(xí)如何使用Eclipse Collections以及如何成為這個項(xiàng)目的代碼貢獻(xiàn)者。

\\\

為什么要重構(gòu)為Eclipse Collections?

\\

Eclipse Collections有什么好處?因?yàn)樗峁┝烁S富的API、高效的內(nèi)存使用以及更好的性能。在我們看來,Eclipse Collections是Java生態(tài)圈中最為豐富的集合庫。而且它與JDK中的集合完全兼容。

\\

輕松遷移

\\

在深入了解這些好處之前,請務(wù)必注意,遷移到Eclipse Collections非常容易,不一定要一次性完成所有工作。Eclipse Collections完全兼容JDK的java.util.* List、Set和Map接口。它也與JDK中的其他庫兼容,比如Collectors。我們的數(shù)據(jù)結(jié)構(gòu)繼承了JDK的這些接口,所以它們可以作為JDK對應(yīng)的替代品(不過Stack接口是不兼容的,還有新的不可變集合也不兼容,因?yàn)樵贘DK中不存在相應(yīng)的接口)。

\\

更豐富的API

\\

實(shí)現(xiàn)了java.util.List、Set和Map接口的Eclipse Collections具有更豐富的API,我們將在后面的代碼示例中探討這些API。JDK中缺少了一些類型,例如Bag、Multimap和BiMap。Bag是一種多重集,可以包含重復(fù)元素。從邏輯上講,我們可以將其視為元素到它們出現(xiàn)次數(shù)的映射。BiMap是一種“倒置”的Map,不僅可以通過按鍵來查找值,也可以通過值來查找鍵。Multimap是一種Map,它的值就是集合(如Key-\u0026gt;List、Key-\u0026gt;Set等)。

\\

eager還是lazy?

\\

在使用Eclipse Collections時,我們可以非常容易地在lazy和eager兩種實(shí)現(xiàn)模式間切換,有助于編寫、理解和調(diào)試函數(shù)式代碼。與Streams API不同的是,eager是默認(rèn)的模式。如果你想要使用lazy模式,只需要在開始你的邏輯代碼之前,在你數(shù)據(jù)結(jié)構(gòu)上調(diào)用.asLazy()。

\\

不可變集合接口

\\

有了不可變集合,你可以在API層面通過不可變性寫出更加正確的代碼。在這種情況下,程序的正確性將由編譯器來保證,避免在執(zhí)行過程中出現(xiàn)意外。借助不可變集合和更豐富的接口,你可以在Java中寫出純函數(shù)式代碼。

\\

原始類型集合

\\

Eclipse Collections也提供了原始類型的容器,所有原始集合類型都有不可變的對等物。值得一提的是,JDK的Streams支持int、long和double,而Eclipse Collections支持所有八個原始類型,并且可以定義用于直接保存原始值的集合(與它們的裝箱對象不同,例如Eclipse Collections IntList是一個int列表,而JDK中的List\u0026lt;Integer\u0026gt;是一個裝箱的原始值列表)。

\\

沒有“bun”方法

\\

什么是“bun”方法?這是由Oracle Java首席設(shè)計(jì)師Brian Goetz發(fā)明的一個比喻說法。一個漢堡包(兩片圓面包中間夾著肉)代表典型的流式代碼結(jié)構(gòu)。在使用Java Streams時,如果你想做點(diǎn)什么,必須把你的方法放在兩塊“面包”之間——前面是stream()(或parallelStream())方法,后面是collect()方法。這些面包其實(shí)沒有什么營養(yǎng),但如果沒有它們,你就無法吃到肉。在Eclipse Collections中,這些方法不是必需的。下面的例子演示了JDK中的bun方法:假設(shè)我們有一個名單,上面有他們的姓名和年齡,我們想要取出年齡超過21歲的人的姓名:

\\\var people = List.of(new Person(\"Alice\

總結(jié)

以上是生活随笔為你收集整理的Eclipse Collections:让Java Streams更上一层楼的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。