Guava实用培训教程.pptx

上传人:b****1 文档编号:1393402 上传时间:2022-10-22 格式:PPTX 页数:43 大小:455.79KB
下载 相关 举报
Guava实用培训教程.pptx_第1页
第1页 / 共43页
Guava实用培训教程.pptx_第2页
第2页 / 共43页
Guava实用培训教程.pptx_第3页
第3页 / 共43页
Guava实用培训教程.pptx_第4页
第4页 / 共43页
Guava实用培训教程.pptx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

Guava实用培训教程.pptx

《Guava实用培训教程.pptx》由会员分享,可在线阅读,更多相关《Guava实用培训教程.pptx(43页珍藏版)》请在冰豆网上搜索。

Guava实用培训教程.pptx

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不能有重复,且

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1