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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

功能性Java集合

發布時間:2023/12/3 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 功能性Java集合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如今,在功能上大肆宣傳,因此至少在Java集合方面,我將簡要介紹一下其中的功能。 我個人喜歡標準
集合API,但在某些情況下可能會很尷尬并添加其他詳細信息。 在Java 8+的更高版本中,這應該不是問題。 在那里,我們可能會擔心不會創建回調地獄,但嘿,對于大多數內容來說,沒有萬靈藥,為什么要為編程編寫一個?

番石榴之路

Guava項目是Google的核心庫之一,其中涵蓋了許多不同的核心語言方面和問題。 有日常使用的實用程序和擴展,例如:集合,基元,緩存,通用批注,字符串處理,I / O,數學,反射等。 我們只會看一下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集合兼容,因為它們主要擴展或實現標準類。 API中有幾個很酷的實用程序,它們的名稱與java.util.Collections中的名稱相似。 基本上,任何了解JDK集合的程序員都應該能夠輕松地轉移到Guava。 用于List的那些稱為Lists ,用于Set的一個稱為Sets,用于Map的一個叫Maps ,其余的依次類推。 例如:

//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);

對應于特定界面的方法以非常直觀的方式進行分組。 還有一些非常好的構建具有各種功能的緩存的方法:

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在大多數Maven存儲庫中都可用,因此很容易將其添加到構建中

蘭伯達

該項目背后的想法是以一種功能性和靜態類型的方式來操縱集合。 這是通過避免重復通常用集合執行的簡單任務來實現的。 重復使程序員可以復制/粘貼,并通過創建來創建bug。 在沒有顯式循環的情況下訪問集合提供了一種過濾,排序,提取,分組,轉換,調用每個項目上的方法或匯總集合中這些元素的元素或字段的方法。 除了所有這些功能之外,lambdaj還是DSL,因為它在語法中添加了非常酷的“糖”功能,使其在偽英語中更具可讀性。 這是通過靜態方法完成的,因此為了使用它們,我們直接將它們包括在內:

import static ch.lambdaj.Lambda.*;

在檢查和匹配方面,lambdaj高度依賴Hamcrest匹配器。 因此,例如,創建一個奇數整數檢查,然后使用該檢查過濾列表:

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));

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

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

績效成本

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

相關鏈接摘要

  • 番石榴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博客中來自JCG合作伙伴 Mite Mitresky的功能Java集合 。

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

總結

以上是生活随笔為你收集整理的功能性Java集合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。