




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Guava快速進(jìn)階主講人:陳雄華目錄Guava是什么?Google開源核心類庫(kù)!開源核心類庫(kù)!快樂(lè)編程,快速編程!快樂(lè)編程,快速編程!高效高效穩(wěn)定,充分測(cè)試!穩(wěn)定,充分測(cè)試!如何獲取Guava?com.google.guavaguava12.0http:/ asList(prim. backingArray)Arrays.asListint lastIndexOf(prim array, prim target)List.lastIndexOfprim toArray(Collection collection)Collection.toArray() prim min(prim. array
2、) Collections.minprim concat(prim. arrays)Iterables.concatprim max(prim. array)Collections.maxboolean contains(prim array, prim target)Collection.containsString join(String separator, prim. array)Joiner.on(separator).joinint indexOf(prim array, prim target)List.indexOfComparator lexicographicalCompa
3、rator()Ordering.natural().lexicographical()對(duì)應(yīng)工具類基礎(chǔ)類型基礎(chǔ)類型對(duì)應(yīng)工具類對(duì)應(yīng)工具類booleanBooleansbyteBytes charCharsdoubleDoublesfloatFloatsintIntslongLongsshortShorts目錄泛型實(shí)例化:ListTestpublicvoidtestListGeneric()Listlist1=newArrayList();/原始的方式list1.add(a);list1.add(b);Listlist2=Lists.newArrayList();list2.add(a);list2
4、.add(b);Listlist3=Lists.newArrayList(a,b);Listlist4=Lists.asList(a, b, new Stringc, d);泛型實(shí)例化:SetTestpublicvoidtestListGeneric()Listlist1=newArrayList();/原始的方式list1.add(a);list1.add(b);Listlist2=Lists.newArrayList();list2.add(a);list2.add(b);Listlist3=Lists.newArrayList(a,b);Listlist4=Lists.asList(a,
5、 b, new Stringc, d);一對(duì)多之Multimap之前MapString,ListmyClassListMaptest2=newHashMapString,List()voidputMyObject(Stringkey,Objectvalue)ListmyClassList=myClassListMap.get(key);if(myClassList=null)myClassList=newArrayList();myClassListMap.put(key,myClassList);myClassList.add(value);自己實(shí)現(xiàn)太麻煩,你需要檢查key是否存在,否則創(chuàng)建
6、一個(gè),最后代碼成為這個(gè)樣子:比較痛苦,如果你希望檢查L(zhǎng)ist中的對(duì)象是否存在,刪除一個(gè)對(duì)象,或者遍歷整個(gè)數(shù)據(jù)結(jié)構(gòu),那么需要更多的代碼。Multimap來(lái)來(lái)了了MultimapmyMultimap=ArrayListMultimap.create();TestpublicvoidtestMultimap()MultimapmyMultimap=ArrayListMultimap.create();myMultimap.put(Fruits,Bannana);myMultimap.put(Fruits,Apple);myMultimap.put(Fruits,Pear);myMultimap.pu
7、t(Vegetables,Carrot);intsize=myMultimap.size();System.out.println(size);/4Collectionfruits=myMultimap.get(Fruits);System.out.println(fruits);/Bannana,Apple myMultimap.remove(Fruits,Pear);System.out.println(myMultimap.get(Fruits);/Bannana,Apple myMultimap.removeAll(Fruits);System.out.println(myMultim
8、ap.get(Fruits);/(EmptyCollection!)這里需要注意,所有的guava的集合都有create()方法,這個(gè)好處就是比較簡(jiǎn)單,你不用重復(fù)泛型信息了。Multimap更多更多這里有一點(diǎn)你可能會(huì)疑惑,就是為何get方法返回的是一個(gè)collection而不是list,這是因?yàn)榍罢邥?huì)更加有用。如果你需要基于multimap直接操作list或者set,那么可以使用在定義類型的時(shí)候使用子類名稱:ListMultimap,SetMultimap和SortedSetMultimap。例如:ListMutlimapmyMutlimap=ArrayListMultimap.create(
9、);ListmyValues=myMutlimap.get(myKey);/ReturnsaList,notaCollection.BiMaps一個(gè)普通的map是一個(gè)key/value的集合,你可以使用key來(lái)查詢,但不能用value查詢key,但是BiMaps則都可以。BiMapbritishToAmerican=HashBiMap.create();/InitialiseandusejustlikeanormalmapbritishToAmerican.put(aubergine,egglant);britishToAmerican.put(courgette,zucchini);brit
10、ishToAmerican.put(jam,jelly);System.out.println(britishToAmerican.get(aubergine);/eggplantBiMapamericanToBritish=britishToAmerican.inverse();System.out.println(americanToBritish.get(eggplant);/aubergineSystem.out.println(americanToBritish.get(zucchini);/courgettel 強(qiáng)制唯一性:首先,BiMap強(qiáng)制其value的唯一性,如果發(fā)現(xiàn)違規(guī)則會(huì)
11、拋出,可用forcePut(key,value)覆蓋已有的條目;l inverse方法:返回BiMap的視圖,如果對(duì)視圖對(duì)象操作將影響原BiMap對(duì)象;MultisetMultiset是什么?是什么?顧名思義,Multiset和Set的區(qū)別就是可以保存多個(gè)相同的對(duì)象它和它和List有什么區(qū)別?有什么區(qū)別?在JDK中,List和Set有一個(gè)基本的區(qū)別,就是List可以包含多個(gè)相同對(duì)象,且是有順序的,而Set不能有重復(fù),且不保證順序(有些實(shí)現(xiàn)有順序,例如LinkedHashSet和SortedSet等)所以Multiset占據(jù)了List和Set之間的一個(gè)灰色地帶:允許重復(fù),但是不保證順序。注意:這
12、種集合在apachecommonscollections中也被稱作“Bag”.Multiset怎么使用?怎么使用?TestpublicvoidtestMultiset()MultisetwordsMultiset=HashMultiset.create();wordsMultiset.addAll(Lists.newArrayList(good,good,study,day,day,up);assertEquals(wordsMultiset.count(good),2);wordsMultiset.remove(good,2);assertEquals(wordsMultiset.count
13、(good),0);Multiset有一個(gè)有用的功能,就是跟蹤每種對(duì)象的數(shù)量,所以你可以用來(lái)進(jìn)行數(shù)字統(tǒng)計(jì)。更多的集合類型Guava提供了若干個(gè)額外的集合類,它們是JDK集合類的補(bǔ)充,可以和JDK集合類和平共處。JDKGuavaMapCorresponding Multiset Supports null elementsHashMapHashMultisetYesTreeMapTreeMultisetYes (if the comparator does)LinkedHashMapLinkedHashMultisetYesConcurrentHashMapConcurrentHashMulti
14、setNoImmutableMapImmutableMultisetNo目錄FunctionTestpublicvoidtestTransform()ListlowerCase=Lists.newArrayList(tom,jhon);ListupperCase=Lists.transform(lowerCase,newFunction()publicStringapply(NullableStrings)returns.toUpperCase(););for(Strings:upperCase)System.out.println(s);/printTOM,JHON利用它們,可以為集合類的轉(zhuǎn)
15、換提供自定義的轉(zhuǎn)換函數(shù)。Function:函數(shù)式編程TestpublicvoidtestTransform()ListlowerCase=Lists.newArrayList(tom,jhon);ListupperCase=Lists.newArrayList();for(Strings:lowerCase)upperCase.add(s.toUpperCase();使用JDKTestpublicvoidtestTransform()ListlowerCase=Lists.newArrayList(tom,jhon);ListupperCase=Lists.transform(lowerCas
16、e,newFunction()publicStringapply(Strings)returns.toUpperCase(););使用Guava,閉包風(fēng)格Function:集合Api支持函數(shù)的最大用途是對(duì)集合元素進(jìn)行各種轉(zhuǎn)換集合元素進(jìn)行各種轉(zhuǎn)換,Guava集合工具都擁有相應(yīng)的API:l Iterables.transform(Iterable,Function);l Iterators.transform(Iterator,Function);l Collections2.transform(Collection,Function)l Lists.transform(List,Function
17、)l Maps.transformValues(Map,Function)l Multimaps.transformValues(Multimap,Function)l Multimaps.transformValues(ListMultimap,Function)l Tables.transformValues(Table,Function)l Maps.transformEntries(Map,EntryTransformer)l .Predicate:謂詞(或稱斷言)TestpublicvoidtestPredicate()SetlowerCase=Sets.newHashSet(tom
18、,jhon);/usingjdkSetnotJhon=Sets.newHashSet();for(Strings:lowerCase)if(!jhon.equalsIgnoreCase(s)notJhon.add(s);/usingguavanotJhon=Sets.filter(lowerCase,newPredicate()publicbooleanapply(Strings)return!jhon.equalsIgnoreCase(s););System.out.println(ddd);最常的功能是,使用Predicate對(duì)集合進(jìn)行過(guò)濾。Predicate:集合Api支持函數(shù)的最大用途
19、是對(duì)集合元素進(jìn)行集合元素進(jìn)行過(guò)濾過(guò)濾,Guava集合工具都擁有相應(yīng)的API:l Iterables.filter(Iterable,Predicate);l Iterators.filter(Iterator,Predicate);l Collections2.filter(Collection,Predicate)l Sets.filter(Set,Predicate)l Sets.filter(SortedSet,Predicate)l Maps.filterKeys(Map,Predicate)l Multimaps.filterKeys(Multimap,Predicate)l .注意
20、:Lists的過(guò)濾方法被特意忽略了,因?yàn)長(zhǎng)ist的get(int)效率不高,所以請(qǐng)使用如下方式進(jìn)行過(guò)濾:Lists.newArrayList(Collections2.filter(list,predicate)目錄Files:操作文件方便!TestpublicvoidtestFiles()throwsThrowableClassPathResourceresource=newClassPathResource(1.txt);bytebytes=Files.toByteArray(resource.getFile();/讀為二進(jìn)制數(shù)組Stringstr=Files.toString(resou
21、rce.getFile(),Charsets.UTF_8);/讀文件內(nèi)容/拷貝文件Files.copy(resource.getFile(),newFile(resource.getFile().getParent()+/2.txt);Listlines=Files.readLines(resource.getFile(),Charsets.UTF_8);/讀取每行/通過(guò)回調(diào)函數(shù)單行處理Files.readLines(resource.getFile(),Charsets.UTF_8,newLineProcessor()privateStringallLines=;publicbooleanp
22、rocessLine(Strings)throwsIOExceptionallLines+=s;returntrue;publicStringgetResult()returnallLines;);InputSupplier/OutputSupplierTestpublicvoidtestByteStreams()throwsThrowableClassPathResourceresource=newClassPathResource(1.txt);/使用InputStream需要外部顯式close()InputStreaminputStream=resource.getInputStream
23、();trybytebytes=ByteStreams.toByteArray(inputStream);finallyinputStream.close();/使用InputSupplier則無(wú)需close(),API內(nèi)部會(huì)close之InputSupplierinputSupplier=Files.newInputStreamSupplier(resource.getFile();bytebytes=ByteStreams.toByteArray(inputSupplier);使用InputStream/OutputStream時(shí),一定要在finally中close外部資源,如果忘記了會(huì)造
24、成資源鎖定。Guava提供的InputSupplier/OutputSupplier會(huì)自動(dòng)完全資源關(guān)閉,Guava的眾多IO工具類API都支持這對(duì)接口,免除關(guān)閉資源的問(wèn)題。ByteStreams/CharStreamsn staticlongcopy(InputStreamfrom,OutputStreamto);/不會(huì)關(guān)閉流n staticlongcopy(InputSupplierfrom,OutputSupplierto)/會(huì)關(guān)閉流n staticvoidreadFully(InputStreamin,byteb)n staticbytetoByteArray(InputStreamin
25、)n staticvoidwrite(bytefrom,OutputSupplierto)ByteStreamsCharStreamsn staticListreadLines(Readabler)n staticStringtoString(Readabler)目錄Objects:Object方法實(shí)現(xiàn)OverridepublicinthashCode()returnObjects.hashCode(getId(),getName();OverridepublicStringtoString()returnObjects.toStringHelper(this).add(id,getId().
26、add(name,getName().toString();Overridepublicbooleanequals(Objecto)if(!(oinstanceofItem)returnfalse;Itemother=(Item)o;returnObjects.equal(getId(),other.getId()&Objects.equal(getName(),other.getName();Objects:覆蓋Object通用方法hashCodepublicinthashCode()returnObjects.hashCode(getId(),getName();publicinthash
27、Code()returnnewHashCodeBuilder(17,37).append(firstName).append(lastName).toHashCode();apachecommonsGuavaObjects:覆蓋Object通用方法toStringOverridepublicStringtoString()returnObjects.toStringHelper(this).add(id,getId().add(name,getName().toString();publicStringtoString()returnnewToStringBuilder(this).appen
28、d(name,getName().append(age,getAge().toString();apachecommonsGuavaObjects:覆蓋Object通用方法equalspublicbooleanequals(Objectobj)if(!(objinstanceofPerson)returnfalse;Personother=(Person)obj;returnObjects.equal(getId(),other.getId()&Objects.equal(getName(),other.getName();publicbooleanequals(Objectobj)if(!(objinstanceofPerson)returnfalse;Personother=(Person)obj;returnEqualsBuilder().append(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位買車合同范例
- 養(yǎng)發(fā)項(xiàng)目合同范本
- 協(xié)議拆遷合同范本
- 一萬(wàn)以內(nèi)機(jī)車轉(zhuǎn)讓合同范本
- 冷壓機(jī)合同范本
- 停車泊位出租合同范本
- 公寓整幢出租合同范本
- 養(yǎng)殖船轉(zhuǎn)讓合同范本
- 勞務(wù)雇傭合同范本英文
- 創(chuàng)富銷售合同范本
- 三年級(jí)書法下冊(cè)《第9課 斜鉤和臥鉤》教學(xué)設(shè)計(jì)
- 兒童財(cái)商養(yǎng)成教育講座PPT
- 大學(xué)學(xué)院學(xué)生獎(jiǎng)助資金及相關(guān)經(jīng)費(fèi)發(fā)放管理暫行辦法
- 2022蘇教版科學(xué)五年級(jí)下冊(cè)全冊(cè)優(yōu)質(zhì)教案教學(xué)設(shè)計(jì)
- 加油員的安全生產(chǎn)責(zé)任制
- 2023年R2移動(dòng)式壓力容器充裝操作證考試題及答案(完整版)
- 九年級(jí)物理實(shí)驗(yàn)記錄單
- 2022年湖北省高中學(xué)業(yè)水平考試真題-音樂(lè)學(xué)科
- 提高屋面防水施工質(zhì)量年QC成果
- 部編初中語(yǔ)文古詩(shī)詞按作者分類梳理
- 博朗IRT6520中文說(shuō)明書家用版
評(píng)論
0/150
提交評(píng)論