功能性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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370018.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python繪制帕累托圖

python繪制帕累托圖代碼 1 import pandas as pd2 import matplotlib.pyplot as plt3 plt.rcParams[font.sans-serif][SimHei]#表示可以顯示中文4 plt.rcParams[axes.unicode_minus]False#表示可以正常顯示正負號5 datapd.read_csv(catering_dish_profit.csv,index_coltype)6 pr…

currentStyle、getComputedStyle 獲取樣式

style.height 獲取的是行間的樣式 currentStyle.height、getComputedStyle(elem,null).height 獲取的是 div 的 content 的寬高&#xff0c; clientHeight 獲取的是 contentpadding&#xff0c; offsetHeight 獲取的是contentpaddingborder。 <script> window.onload…

html5 測評游戲,暗黑之王評測:HTML5游戲鑄就最華麗ARPG冒險

由白鷺時代(Egret Technology)與比悅科技聯手推出的重度大型HTML5游戲《暗黑之王》&#xff0c;一款典型的ARPG手游&#xff0c;其HTML5版本推出以來&#xff0c;獲得了來自業界、玩家和媒體的大量關注。其豐富的游戲內容和玩法&#xff0c;加上卓越的游戲性能表現&#xff0c;…

搞定flex布局

這幾種方式的搭配使用可以輕松搞定 PC 端頁面的常見需求&#xff0c;比如實現水平居中可以使用 margin: 0 auto&#xff0c;實現水平垂直同時居中可以如下設置&#xff1a;.dad {position: relative; } .son {position: absolute;margin: auto;top: 0;right: 0;bottom: 0;left…

Java基礎5一數組的常見應用算法

常用算法 1.冒泡排序: 原理&#xff1a;比較兩個相鄰的元素&#xff0c;將值大的元素交換至右端 示例: public static void bubbleSort(int[] a) {int n a.length;//總共進行n-1輪的比較for (int i 1; i < n; i) {for (int j 0; j < n - i; j) {if (a[j] > a[j 1]…

使用Xtend構建Vaadin UI

今天&#xff0c;我決定向Xtend打個招呼。 我希望學習一些新的編程語言。 選擇一個標準的清單并不多。 它必須是在JVM上運行的編程語言&#xff0c; 如果我不需要學習用于建筑應用的全新生態系統&#xff0c;那就太好了。 我已經檢查了幾個選項。 JVM的編程語言列表已不多了…

python 瀏覽器顯示本地文件夾_瀏覽器讀取本地文件

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存儲NAS是一個可共享訪問&#xf…

p15頁

給你一個n*n的01矩陣&#xff0c;只能夠將0變成1&#xff0c;使得每個元素上下左右之和均是偶數&#xff0c; 比如 0 0 0 0 1 0 1 0 0>>>>1 0 1 0 0 0 0 1 0 一個轉變了3步 多實例T 然后一個n&#xff08;n<15&#xff09; 表示n*n的矩陣 …

html 登陸sql server,jsp實現注冊與登錄頁面+sqlsever2008

//index.jspString path request.getContextPath();String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/";%>登陸用戶登陸用戶名&#xff1a;密 碼:注冊新用戶//Logon.jspString path req…

百度前端學院-基礎學院-第四課

今天是第四天&#xff0c;進度可以&#xff0c;表揚一下自己。 今天的課程目標是&#xff1a;掌握 CSS 稍微復雜的一些選擇器&#xff0c;還有背景&#xff0c;邊框等一些 CSS 樣式屬性。 CSS背景&#xff1a; 背景色&#xff1a;background-color:gray; 背景圖&#xff1a…

JUnit測試方法訂購

直到4.10版為止的Junit都使用反射API返回的測試類中測試方法的順序作為測試方法執行的順序– Class.getMethods&#xff08;&#xff09; 。 引用getMethods&#xff08;&#xff09;api的Javadoc&#xff1a; 返回的數組中的元素未排序&#xff0c;并且沒有任何特定順序。 …

html中padding和margin的區別和用法與存在的bug消除

關于margin&#xff1a;在需要border外側添加距離時。空白處不需要背景時。相連的兩個部分的地方需要加外邊的邊距時使用。 關于padding&#xff1a;在需要border內側添加距離時。空白處需要背景時。相連的兩個部分的地方需要加內部的邊距時使用。 IE6中雙邊距Bug&#xff1a; …

python發微信提醒天氣冷了注意保暖_2019天氣變冷的朋友圈說說 注意保暖的微信問候語...

1.天冷了&#xff0c;注意添加衣物&#xff0c;別著涼。可你還是著涼了。看你難受的樣子&#xff0c;我的心&#xff0c;唉&#xff0c;只有一句話能表達&#xff1a;小樣&#xff0c;你也有今天&#xff01;為了不讓我得逞&#xff0c;你要注意身體哦。2.天氣變涼要注意&#…

Fiddler抓包使用教程-QuickExec

轉載請標明出處&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/73468287 本文出自【趙彥軍的博客】 在 Fiddler 中自帶了一個 QuickExec 命令行&#xff0c;用戶可以直接輸入并快速執行腳本命令。 常見命令 help 打開官方的使用頁面介紹&#xff0c;所有的命令…

自己整理的css3動畫庫,附下載鏈接

動畫調用語法 animation: bounceIn 0.3s ease 0.2s 1 both; 按順序解釋參數&#xff1a; 動畫名稱 如&#xff1a;bounceIn 一周期所用時間 如&#xff1a;0.3s 速度曲線 如&#xff1a;ease 值 描述 linear 動畫從頭到尾的速度是相同的。 ease 默認。動畫以低速開始&#xff0…

帶有Spring的REST的ETag

1.概述 本文將重點介紹ETags-Spring支持&#xff0c;RESTful API的集成測試以及帶有curl的使用場景。 這是關于使用Spring 3.1和Spring Security 3.1和基于Java的配置來建立安全的RESTful Web服務的系列文章的第9篇。 REST with Spring系列&#xff1a; 第1部分 – 使用Spring…

html5與css3都要學嗎,前端要學css3嗎?

前端要學css3&#xff1b;HTML5、CSS3是前端工程師必須要學會。現在移動端的興起&#xff0c;導致web前端開發的技術逐變向css3和html5轉變&#xff0c;所以css3一定要學。CSS3是CSS(層疊樣式表)技術的升級版本&#xff0c;于1999年開始制訂&#xff0c;2001年5月23日W3C完成了…

PHP中cookie和session的區別

1、cookie數據存放在客戶的瀏覽器上&#xff0c;session數據放在服務器上。 2、cookie不是很安全&#xff0c;別人可以分析存放在本地的COOKIE并進行COOKIE欺騙考慮到安全應當使用session。 3、session會在一定時間內保存在服務器上。當訪問增多&#xff0c;會比較占用你服務器…

ubuntu下anaconda3+pygame

有是很無語的地方&#xff0c;網上教程一堆&#xff0c;又是要下載什么包&#xff0c;然后又是什么依賴亂七八糟的整一堆。都不知道怎么想的 試了 sudo apt-get install python-pygame 這個是行不通的&#xff01;&#xff01;&#xff01;根本沒有任何卵用 害我捯飭了半天&am…

react 判斷圖片是否加載完成_React中型項目的優化實踐

項目介紹整個項目大概有60個頁面&#xff0c;用到的組件大概150&#xff0c;package里面的依賴大概有70個&#xff0c;應該勉強算得上是一個中型的React的項目了。下面給大家看看我們現在build一次項目的結果--打包時間約150s&#xff0c;打包完之后的資源gzip之后約1.2m&#…