Guava实用培训教程.pptx
《Guava实用培训教程.pptx》由会员分享,可在线阅读,更多相关《Guava实用培训教程.pptx(43页珍藏版)》请在冰豆网上搜索。
![Guava实用培训教程.pptx](https://file1.bdocx.com/fileroot1/2022-10/7/57c8714b-17fc-4309-9c7f-21ca85a3d6a0/57c8714b-17fc-4309-9c7f-21ca85a3d6a01.gif)
Guava快速进阶,主讲人:
陈雄华,目录,Guava概述Strings基础类型CollectionsFunctionsandPredicatesIO处理其它,Guava是什么?
Google开源核心类库!
快乐编程,快速编程!
高效稳定,充分测试!
如何获取Guava?
com.google.guavaguava12.0,http:
/,项目网址:
Maven:
目录,Guava概述Strings基础类型CollectionsFunctionsandPredicatesIO处理其它,Joiner:
合并字符串,TestpublicvoidtestJoiner()Stringstr1=Joiner.on(;).skipNulls().join(Arrays.asList(a,b,null,c);assertEquals(str1,a;b;c);Stringstr2=Joiner.on(,).join(Arrays.asList(1,5,7);assertEquals(str2,1,5,7);,Splitter:
OOP,/ApacheStringUtils.Stringtokens1=StringUtils.split(one,two,three,);/GoogleGuavasplitter.Iteratabletokens2=Splitter.on(,),split(one,two,three);,很明显,google提供的方法更加的面向对象一点,因为它要先创建一个Splitter对象,然后使用它来分割字符串,而apache的方法则有点函数式编程的味道,它的方法都是静态的。
和apachecommonsStringUtils使用方法比拼,Splitter:
性能,TestpublicvoidtestPerformance()finalStringnumberList=One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten;longstart=System.currentTimeMillis();for(inti=0;i1000000;i+)StringUtils.split(numberList,);System.out.println(System.currentTimeMillis()-start);start=System.currentTimeMillis();for(inti=0;i1000000;i+)Splitter.on(,).split(numberList);System.out.println(System.currentTimeMillis()-start);start=System.currentTimeMillis();Splittersplitter=Splitter.on(,);for(inti=0;i1000000;i+)splitter.split(numberList);System.out.println(System.currentTimeMillis()-start);,和apachecommonsStringUtils性能比拼,apachecommons:
406guava(未复用Splitter):
36guava(复用Spliter):
10,Splitter:
灵活,TestpublicvoidtestSplitter()Iterablearrs=Splitter.on(,).trimResults()头尾去除.omitEmptyStrings()忽略空字符串.split(,a,b,);Stringstr2=Joiner.on(;).join(arrs);assertEquals(str2,a;b);,CharMatcher:
字符串匹配器,CharMatcher包括两个功能,其一是字符串匹配,其二是字符串处理,它使匹配和处理解耦了,使字符串处理的灵活性大大增强!
TestpublicvoidtestCharMatcher()assertEquals(CharMatcher.DIGIT.retainFrom(sometext89983andmore),89983);assertEquals(CharMatcher.DIGIT.removeFrom(sometext89983andmore),sometextandmore);assertEquals(CharMatcher.anyOf(abcxy).removeFrom(abcdefgxyz),defgz);/匹配条件复合运算Stringstr1=CharMatcher.inRange(a,f).and(CharMatcher.isNot(c).and(CharMatcher.isNot(e).or(CharMatcher.is(z).replaceFrom(abyczef,*);assertEquals(str1,*yc*e*);,目录,Guava概述Strings基础类型CollectionsFunctionsandPredicatesIO处理其它,来看实例,TestpublicvoidtestMe()ListintArr=Ints.asList(1,3,4,6);StringintStr=Ints.join(,1,2,3,4);intconcat=Ints.concat(newint1,3,newint4,6);intmax=Ints.max(2,3,4,7);booleancontains=Ints.contains(newint1,3,4,5,6);intints=Ints.toArray(Lists.newArrayList(1,2,3,5);,基础类型通用方法,对应工具类,目录,Guava概述Strings基础类型CollectionsFunctionsandPredicatesIO处理其它,泛型实例化:
List,TestpublicvoidtestListGeneric()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,b,newStringc,d);,泛型实例化:
Set,TestpublicvoidtestListGeneric()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,b,newStringc,d);,一对多之Multimap之前,MapmyClassListMaptest2=newHashMap(),voidputMyObject(Stringkey,Objectvalue)ListmyClassList=myClassListMap.get(key);if(myClassList=null)myClassList=newArrayList();myClassListMap.put(key,myClassList);myClassList.add(value);,自己实现太麻烦,你需要检查key是否存在,否则创建一个,最后代码成为这个样子:
比较痛苦,如果你希望检查List中的对象是否存在,删除一个对象,或者遍历整个数据结构,那么需要更多的代码。
Multimap来了,MultimapmyMultimap=ArrayListMultimap.create();,TestpublicvoidtestMultimap()MultimapmyMultimap=ArrayListMultimap.create();myMultimap.put(Fruits,Bannana);myMultimap.put(Fruits,Apple);myMultimap.put(Fruits,Pear);myMultimap.put(Vegetables,Carrot);intsize=myMultimap.size();System.out.println(size);/4Collectionfruits=myMultimap.get(Fruits);System.out.println(fruits);/Bannana,ApplemyMultimap.remove(Fruits,Pear);System.out.println(myMultimap.get(Fruits);/Bannana,ApplemyMultimap.removeAll(Fruits);System.out.println(myMultimap.get(Fruits);/(EmptyCollection!
),这里需要注意,所有的guava的集合都有create()方法,这个好处就是比较简单,你不用重复泛型信息了。
Multimap更多,这里有一点你可能会疑惑,就是为何get方法返回的是一个collection而不是list,这是因为前者会更加有用。
如果你需要基于multimap直接操作list或者set,那么可以使用在定义类型的时候使用子类名称:
ListMultimap,SetMultimap和SortedSetMultimap。
例如:
ListMutlimapmyMutlimap=ArrayListMultimap.create();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);britishToAmerican.put(jam,jelly);System.out.println(britishToAmerican.get(aubergine);/eggplantBiMapamericanToBritish=britishToAmerican.inverse();System.out.println(americanToBritish.get(eggplant);/aubergineSystem.out.println(americanToBritish.get(zucchini);/courgette,强制唯一性:
首先,BiMap强制其value的唯一性,如果发现违规则会抛出,可用forcePut(key,value)覆盖已有的条目;inverse方法:
返回BiMap的视图,如果对视图对象操作将影响原BiMap对象;,Multiset,Multiset是什么?
顾名思义,Multiset和Set的区别就是可以保存多个相同的对象,它和List有什么区别?
在JDK中,List和Set有一个基本的区别,就是List可以包含多个相同对象,且是有顺序的,而Set不能有重复,且