资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,#,Guava,快速进阶,主讲人,:,陈雄华,目录,Guava,概述,Strings,基础类型,Collections,Functions and Predicates,IO,处理,其它,Guava,是什么?,Google,开源核心,类,类库!,快乐编程,,,,快速编,程,程!,高效稳定,充,分,分测试!,如何获取,Guava,?,com.google.guavaguava12.0,http:/ and Predicates,IO,处理,其它,Joiner,:合并字,符,符串,Test,public voidtestJoiner(),String str1=Joiner.on(;).skipNulls(),.join(Arrays.asList(a,b,null,c);,assertEquals(str1,a;b;c);,String str2=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,的方法,则,则有点,函,函数式,编,编程的,味,味道,,它的方法,都,都是静,态,态的。,和,apache commonsStringUtils,使用方法比拼,Splitter:,性能,Test,public void testPerformance(),finalString numberList=One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten;,longstart=System.currentTimeMillis();,for(int i=0;i1000000;i+),StringUtils.split(numberList,);,System.out.println(System.currentTimeMillis()-start);,start=System.currentTimeMillis();,for(int i=0;i1000000;i+),Splitter.on(,).split(numberList);,System.out.println(System.currentTimeMillis()-start);,start=System.currentTimeMillis();,Splitter splitter=Splitter.on(,);,for(int i=0;imyClassListMaptest2,=,new,HashMap(),void,putMyObject(Stringkey,Objectvalue),ListmyClassList=myClassListMap.get(key);,if,(myClassList=,null,),myClassList=,new,ArrayList();,myClassListMap.put(key,myClassList);,myClassList.add(value);,自己实现,太,太麻,烦,烦,,你,你需,要,要检,查,查,key,是否,存,存在,,,,否,则,则创,建,建一,个,个,,最,最后,代,代码,成,成为,这,这个,样,样子,:,:,比较痛苦,,,,如,果,果你,希,希望,检,检查,List,中的,对,对象,是,是否,存,存在,,,,删,除,除一,个,个对,象,象,,或,或者,遍,遍历,整,整个,数,数据,结,结构,,,,那,么,么需,要,要更,多,多的,代,代码,。,。,Multimap,来了,MultimapmyMultimap=ArrayListMultimap.create();,Test,publicvoidtestMultimap(),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);/4,Collection fruits=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(myMultimap.get(Fruits);/(EmptyCollection!),这里需要,注,注意,所,有,有的,guava,的集合都,有,有,create(),方法,这,个,个好处就,是,是比较简,单,单,你不,用,用重复泛,型,型信息了,。,。,Multimap,更多,这里有一,点,点你可能,会,会疑惑,,就,就是为何,get,方法返回,的,的是一个,collection,而不是,list,,这是因,为,为前者会,更,更加有用,。,。如果你,需,需要基于,multimap,直,接,接,操,操,作,作,list,或,者,者,set,,,那,那,么,么,可,可,以,以,使,使,用,用,在,在,定,定,义,义,类,类,型,型,的,的,时,时,候,候,使,使,用,用,子,子,类,类,名,名,称,称,:,:,ListMultimap,,,SetMultimap,和,SortedSetMultimap,。例如:,ListMutlimap myMutlimap=ArrayListMultimap.create();,List myValues=myMutlimap.get(myKey);/Returns aList,nota Collection.,BiMaps,一个普通的,map,是一个,key/value,的集合,你,可,可以使用,key,来查询,但不能用,value,查询,key,,但是,BiMaps,则都可以。,BiMapbritishToAmerican=HashBiMap.create();,/Initialiseand use just like anormal map,britishToAmerican.put(aubergine,egglant);,britishToAmerican.put(courgette,zucchini);,britishToAmerican.put(jam,jelly);,System.out.println(britishToAmerican.get(aubergine);/eggplant,BiMapamericanToBritish=britishToAmerican.inverse();,System.out.println(americanToBritish.get(eggplant);/aubergine,System.out.println(americanToBritish.get(zucchini);/courgette,强制唯一性,:,:首先,,BiMap,强制其,value,的唯一性,,如,如果发现违,规,规则会抛出,可用,forcePut(key,value),覆盖已有的,条,条目;,inverse,方法:返回,BiMap,的视图,如,果,果对视图对,象,象操作将影,响,响原,BiMap,对象;,Multiset,Multiset,是什么?,顾名思义,,Multiset,和,Set,的区别就是,可,可以保存多,个,个相同的对,象,象,它和,List,有什么区别,?,?,在,JDK,中,,List,和,Set,有一个基本,的,的区别,就,是,是,List,可以,包,包含,多,多个,相,相同,对,对象,,,,且,是,是有,顺,顺序,的,的,,而,而,Set,不能,有,有重,复,复,,且,且不,保,保证,顺,顺序,(,(有,些,些实,现,现有,顺,顺序,,,,例,如,如,LinkedHashSet,和,SortedSet,等),所,所,以,以,Multiset,占据,了,了,List,和,Set,之间,的,的一,个,个灰,色,色地,带,带:,允,允许,重,重复,,,,但,是,是不,保,保证,顺,顺序,。,。,注意,:,:这,种,种集,合,合在,apachecommonscollections,中也,被,被称,作,作“,Bag”.,Multiset,怎么,使,使用,?,?,Test,publicvoidtestMultiset(),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(good),0);,Multiset,有一,个,个有,用,用的,功,功能,,,,就,是,是跟,踪,踪每,种,种对,象,象的,数,数量,,,,所,以,以你,可,可以,用,用来,进,进行,数,数字,统,统计,。,。,更多,的,的集,合,合类,型,型,Guava,提供,了,了若,干,干个,额,额外,的,的集,合,合类,,,,它,们,们是,JDK,集合,类,类的,补,补充,,,,可,以,以和,JDK,集合,类,类和,平,平共,处,处。,JDK,G,uava,Map,Corresponding Multiset,Supportsnullelements,HashMap,HashMultiset,Yes,TreeMap,TreeMultiset,Yes(if the comparator does),LinkedHashMap,LinkedHashMultiset,Yes,ConcurrentHashMap,ConcurrentHashMultiset,No,ImmutableMap,ImmutableMultiset,No,目录,Guava,概述,Strings,基础,类,类型,Collections,FunctionsandPredicates,IO,处理,其它,Function,Test,publicvoidtestTransform(),ListlowerCase=Lists.newArrayList(tom,jhon);,ListupperCase=Lists.transform(lowerCase,newFunction(),publicStringapply(NullableStrings),returns.toUpperCase();,);,for(Strings:upperCase),System.out.println(s);/print TOM,
展开阅读全文