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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

java

功能性Java集合

發(fā)布時(shí)間:2023/12/3 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 功能性Java集合 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如今,在功能上大肆宣傳,因此至少在Java集合方面,我將簡(jiǎn)要介紹一下其中的功能。 我個(gè)人喜歡標(biāo)準(zhǔn)
集合API,但在某些情況下可能會(huì)很尷尬并添加其他詳細(xì)信息。 在Java 8+的更高版本中,這應(yīng)該不是問(wèn)題。 在那里,我們可能會(huì)擔(dān)心不會(huì)創(chuàng)建回調(diào)地獄,但嘿,對(duì)于大多數(shù)內(nèi)容來(lái)說(shuō),沒(méi)有萬(wàn)靈藥,為什么要為編程編寫(xiě)一個(gè)?

番石榴之路

Guava項(xiàng)目是Google的核心庫(kù)之一,其中涵蓋了許多不同的核心語(yǔ)言方面和問(wèn)題。 有日常使用的實(shí)用程序和擴(kuò)展,例如:集合,基元,緩存,通用批注,字符串處理,I / O,數(shù)學(xué),反射等。 我們只會(huì)看一下Collections的好東西,所以讓我們看看其中的一些:

// listImmutableList<String> of =ImmutableList.of("a", "b", "c", "d");// Same one for mapImmutableMap<String, String> map =ImmutableMap.of("key1", "value1", "key2", "value2");//list of intsList<Integer> theList = Ints.asList(1, 2, 3, 4, 522, 5, 6);

Guava集合與JDK集合兼容,因?yàn)樗鼈冎饕獢U(kuò)展或?qū)崿F(xiàn)標(biāo)準(zhǔn)類(lèi)。 API中有幾個(gè)很酷的實(shí)用程序,它們的名稱(chēng)與java.util.Collections中的名稱(chēng)相似。 基本上,任何了解JDK集合的程序員都應(yīng)該能夠輕松地轉(zhuǎn)移到Guava。 用于List的那些稱(chēng)為L(zhǎng)ists ,用于Set的一個(gè)稱(chēng)為Sets,用于Map的一個(gè)叫Maps ,其余的依次類(lèi)推。 例如:

//create new List List<someLongName> list = Lists.newArrayList(); //create new LinkedHashMap Map<someKeyType, SomeValueType> map = Maps.newLinkedHashMap();//initalize Array List on the spot List<String> someList = Lists.newArrayList("one", "two", "three");//set inital size for readability as well as performance List<Type> exactly100 = Lists.newArrayListWithCapacity(100); List<Type> approx100 = Lists.newArrayListWithExpectedSize(100);

對(duì)應(yīng)于特定界面的方法以非常直觀的方式進(jìn)行分組。 還有一些非常好的構(gòu)建具有各種功能的緩存的方法:

Cache<Integer, Customer> cache = CacheBuilder.newBuilder().weakKeys().maximumSize(10000).expireAfterWrite(10, TimeUnit.MINUTES).build(new CacheLoader<Integer, Customer>() {@Overridepublic Customer load(Integer key) throws Exception {return retreveCustomerForKey(key);}});

由于Guava在大多數(shù)Maven存儲(chǔ)庫(kù)中都可用,因此很容易將其添加到構(gòu)建中

蘭伯達(dá)

該項(xiàng)目背后的想法是以一種功能性和靜態(tài)類(lèi)型的方式來(lái)操縱集合。 這是通過(guò)避免重復(fù)通常用集合執(zhí)行的簡(jiǎn)單任務(wù)來(lái)實(shí)現(xiàn)的。 重復(fù)使程序員可以復(fù)制/粘貼,并通過(guò)創(chuàng)建來(lái)創(chuàng)建bug。 在沒(méi)有顯式循環(huán)的情況下訪問(wèn)集合提供了一種過(guò)濾,排序,提取,分組,轉(zhuǎn)換,調(diào)用每個(gè)項(xiàng)目上的方法或匯總集合中這些元素的元素或字段的方法。 除了所有這些功能之外,lambdaj還是DSL,因?yàn)樗谡Z(yǔ)法中添加了非常酷的“糖”功能,使其在偽英語(yǔ)中更具可讀性。 這是通過(guò)靜態(tài)方法完成的,因此為了使用它們,我們直接將它們包括在內(nèi):

import static ch.lambdaj.Lambda.*;

在檢查和匹配方面,lambdaj高度依賴(lài)Hamcrest匹配器。 因此,例如,創(chuàng)建一個(gè)奇數(shù)整數(shù)檢查,然后使用該檢查過(guò)濾列表:

Matcher<Integer> odd = new Predicate<Integer>() {public boolean apply(Integer item) {return item % 2 == 1;} }; List<Integer> oddNumbers = filter(odd, asList(1, 2, 3, 4, 5));

并按預(yù)期該列表將返回列表[1,3,5]。 Lambdaj在DSL方面走得更遠(yuǎn),例如:

List<Beneficiary> beneficiaries = with(transactions).retain(having(on(Transaction.class).getQunatity(), lessThan(100))).extract(on(Transaction.class).getBeneficiary()).sort(on(Beneficiary.class).getName());

績(jī)效成本

盡管使應(yīng)用程序快速運(yùn)行的最佳方法是擁有盡可能最干凈的代碼,但是有時(shí)您必須進(jìn)行優(yōu)化。為此,創(chuàng)建者提供了一些有關(guān)內(nèi)存使用和時(shí)間的信息。 Lambdaj有一個(gè)性能Wiki頁(yè)面,其中包含代碼示例。 其他程序員也進(jìn)行了一些測(cè)試,例如,他們將 lambdaj與JDK8進(jìn)行了比較 。 關(guān)于番石榴的內(nèi)存使用情況也有一些衡量標(biāo)準(zhǔn)。 至于Guava的性能,大多數(shù)功能是標(biāo)準(zhǔn)的JDK類(lèi)構(gòu)建器和實(shí)用程序,因此開(kāi)銷(xiāo)很小。 歸根結(jié)底,由您決定這些庫(kù)中的每一個(gè)對(duì)您的項(xiàng)目有多大影響,以及這是否有積極意義。 我的想法是,幾乎每個(gè)項(xiàng)目的類(lèi)路徑上都必須包含Guava。

相關(guān)鏈接摘要

  • 番石榴http://code.google.com/p/guava-libraries/
  • lambdaj http://code.google.com/p/lambdaj/
  • Hamcrest http://hamcrest.org/
  • 番石榴鏈接http://www.tfnico.com/presentations/google-guava
  • 番石榴例子https://github.com/mitemitreski/guava-examples
  • 番石榴演示文稿http://blog.mitemitreski.com/2012/07/google-guava-for-cleaner-code.html

參考: Java Advent Calendar博客中來(lái)自JCG合作伙伴 Mite Mitresky的功能Java集合 。

翻譯自: https://www.javacodegeeks.com/2012/12/functional-java-collections.html

總結(jié)

以上是生活随笔為你收集整理的功能性Java集合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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