Guava培训(共44张)_第1页
Guava培训(共44张)_第2页
Guava培训(共44张)_第3页
Guava培训(共44张)_第4页
Guava培训(共44张)_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Guava快速进阶主讲人:陈雄华目录Guava是什么?Google开源核心类库!开源核心类库!快乐编程,快速编程!快乐编程,快速编程!高效高效稳定,充分测试!稳定,充分测试!如何获取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()对应工具类基础类型基础类型对应工具类对应工具类booleanBooleansbyteBytes charCharsdoubleDoublesfloatFloatsintIntslongLongsshortShorts目录泛型实例化: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);泛型实例化: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);一对多之Multimap之前MapString,ListmyClassListMaptest2=newHashMapString,List()voidputMyObject(Stringkey,Objectvalue)ListmyClassList=myClassListMap.get(key);if(myClassList=null)myClassList=newArrayList();myClassListMap.put(key,myClassList);myClassList.add(value);自己实现太麻烦,你需要检查key是否存在,否则创建

6、一个,最后代码成为这个样子:比较痛苦,如果你希望检查List中的对象是否存在,删除一个对象,或者遍历整个数据结构,那么需要更多的代码。Multimap来来了了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()方法,这个好处就是比较简单,你不用重复泛型信息了。Multimap更多更多这里有一点你可能会疑惑,就是为何get方法返回的是一个collection而不是list,这是因为前者会更加有用。如果你需要基于multimap直接操作list或者set,那么可以使用在定义类型的时候使用子类名称:ListMultimap,SetMultimap和SortedSetMultimap。例如:ListMutlimapmyMutlimap=ArrayListMultimap.create(

9、);ListmyValues=myMutlimap.get(myKey);/ReturnsaList,notaCollection.BiMaps一个普通的map是一个key/value的集合,你可以使用key来查询,但不能用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 强制唯一性:首先,BiMap强制其value的唯一性,如果发现违规则会

11、抛出,可用forcePut(key,value)覆盖已有的条目;l inverse方法:返回BiMap的视图,如果对视图对象操作将影响原BiMap对象;MultisetMultiset是什么?是什么?顾名思义,Multiset和Set的区别就是可以保存多个相同的对象它和它和List有什么区别?有什么区别?在JDK中,List和Set有一个基本的区别,就是List可以包含多个相同对象,且是有顺序的,而Set不能有重复,且不保证顺序(有些实现有顺序,例如LinkedHashSet和SortedSet等)所以Multiset占据了List和Set之间的一个灰色地带:允许重复,但是不保证顺序。注意:这

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有一个有用的功能,就是跟踪每种对象的数量,所以你可以用来进行数字统计。更多的集合类型Guava提供了若干个额外的集合类,它们是JDK集合类的补充,可以和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利用它们,可以为集合类的转

15、换提供自定义的转换函数。Function:函数式编程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,闭包风格Function:集合Api支持函数的最大用途是对集合元素进行各种转换集合元素进行各种转换,Guava集合工具都拥有相应的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对集合进行过滤。Predicate:集合Api支持函数的最大用途

19、是对集合元素进行集合元素进行过滤过滤,Guava集合工具都拥有相应的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的过滤方法被特意忽略了,因为List的get(int)效率不高,所以请使用如下方式进行过滤:Lists.newArrayList(Collections2.filter(list,predicate)目录Files:操作文件方便!TestpublicvoidtestFiles()throwsThrowableClassPathResourceresource=newClassPathResource(1.txt);bytebytes=Files.toByteArray(resource.getFile();/读为二进制数组Stringstr=Files.toString(resou

21、rce.getFile(),Charsets.UTF_8);/读文件内容/拷贝文件Files.copy(resource.getFile(),newFile(resource.getFile().getParent()+/2.txt);Listlines=Files.readLines(resource.getFile(),Charsets.UTF_8);/读取每行/通过回调函数单行处理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则无需close(),API内部会close之InputSupplierinputSupplier=Files.newInputStreamSupplier(resource.getFile();bytebytes=ByteStreams.toByteArray(inputSupplier);使用InputStream/OutputStream时,一定要在finally中close外部资源,如果忘记了会造

24、成资源锁定。Guava提供的InputSupplier/OutputSupplier会自动完全资源关闭,Guava的众多IO工具类API都支持这对接口,免除关闭资源的问题。ByteStreams/CharStreamsn staticlongcopy(InputStreamfrom,OutputStreamto);/不会关闭流n staticlongcopy(InputSupplierfrom,OutputSupplierto)/会关闭流n staticvoidreadFully(InputStreamin,byteb)n staticbytetoByteArray(InputStreamin

25、)n staticvoidwrite(bytefrom,OutputSupplierto)ByteStreamsCharStreamsn staticListreadLines(Readabler)n staticStringtoString(Readabler)目录Objects:Object方法实现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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论