1、Guava快速进阶,主讲人:陈雄华,目录,Guava概述Strings基础类型CollectionsFunctions and PredicatesIO处理其它,Guava是什么?,Google开源核心类库!,快乐编程,快速编程!,高效稳定,充分测试!,如何获取Guava?,com.google.guava guava 12.0,http:/,项目网址:,Maven:,目录,Guava概述Strings基础类型CollectionsFunctions and PredicatesIO处理其它,Joiner:合并字符串,Test public void testJoiner()String st
2、r1=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
3、(one,two,three);,很明显,google提供的方法更加的面向对象一点,因为它要先创建一个Splitter对象,然后使用它来分割字符串,而apache的方法则有点函数式编程的味道,它的方法都是静态的。,和apache commons StringUtils使用方法比拼,Splitter:性能,Test public void testPerformance()final String numberList=One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten;long start=System.currentTimeMillis();fo
4、r(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=
5、Splitter.on(,);for(int i=0;i1000000;i+)splitter.split(numberList);System.out.println(System.currentTimeMillis()-start);,和apache commons StringUtils性能比拼,apache commons:406guava(未复用Splitter):36guava(复用Spliter):10,Splitter:灵活,Test public void testSplitter()Iterable arrs=Splitter.on(,).trimResults()头尾去除
6、.omitEmptyStrings()忽略空字符串.split(,a,b,);String str2=Joiner.on(;).join(arrs);assertEquals(str2,a;b);,CharMatcher:字符串匹配器,CharMatcher包括两个功能,其一是字符串匹配,其二是字符串处理,它使匹配和处理解耦了,使字符串处理的灵活性大大增强!,Test public void testCharMatcher()assertEquals(CharMatcher.DIGIT.retainFrom(some text 89983 and more),89983);assertEqua
7、ls(CharMatcher.DIGIT.removeFrom(some text 89983 and more),some text and more);assertEquals(CharMatcher.anyOf(abcxy).removeFrom(abcdefgxyz),defgz);/匹配条件复合运算 String str1=CharMatcher.inRange(a,f).and(CharMatcher.isNot(c).and(CharMatcher.isNot(e).or(CharMatcher.is(z).replaceFrom(abyczef,*);assertEquals(
8、str1,*yc*e*);,目录,Guava概述Strings基础类型CollectionsFunctions and PredicatesIO处理其它,来看实例,Test public void testMe()List intArr=Ints.asList(1,3,4,6);String intStr=Ints.join(,1,2,3,4);int concat=Ints.concat(new int1,3,new int4,6);int max=Ints.max(2,3,4,7);boolean contains=Ints.contains(new int1,3,4,5,6);int i
9、nts=Ints.toArray(Lists.newArrayList(1,2,3,5);,基础类型通用方法,对应工具类,目录,Guava概述Strings基础类型CollectionsFunctions and PredicatesIO处理其它,泛型实例化:List,Test public void testListGeneric()List list1=new ArrayList();/原始的方式 list1.add(a);list1.add(b);List list2=Lists.newArrayList();list2.add(a);list2.add(b);List list3=Li
10、sts.newArrayList(a,b);List list4=Lists.asList(a,b,new Stringc,d);,泛型实例化:Set,Test public void testListGeneric()List list1=new ArrayList();/原始的方式 list1.add(a);list1.add(b);List list2=Lists.newArrayList();list2.add(a);list2.add(b);List list3=Lists.newArrayList(a,b);List list4=Lists.asList(a,b,new Strin
11、gc,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中
12、的对象是否存在,删除一个对象,或者遍历整个数据结构,那么需要更多的代码。,Multimap来了,MultimapmyMultimap=ArrayListMultimap.create();,Test public void testMultimap()MultimapmyMultimap=ArrayListMultimap.create();myMultimap.put(Fruits,Bannana);myMultimap.put(Fruits,Apple);myMultimap.put(Fruits,Pear);myMultimap.put(Vegetables,Carrot);int si
13、ze=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);/(EmptyCo
14、llection!),这里需要注意,所有的guava的集合都有create()方法,这个好处就是比较简单,你不用重复泛型信息了。,Multimap更多,这里有一点你可能会疑惑,就是为何get方法返回的是一个collection而不是list,这是因为前者会更加有用。如果你需要基于multimap直接操作list或者set,那么可以使用在定义类型的时候使用子类名称:ListMultimap,SetMultimap和SortedSetMultimap。例如:,ListMutlimap myMutlimap=ArrayListMultimap.create();List myValues=myMut
15、limap.get(myKey);/Returns a List,not a Collection.,BiMaps,一个普通的map是一个key/value的集合,你可以使用key来查询,但不能用value查询key,但是BiMaps则都可以。,BiMap britishToAmerican=HashBiMap.create();/Initialise and use just like a normal map britishToAmerican.put(aubergine,egglant);britishToAmerican.put(courgette,zucchini);britishT
16、oAmerican.put(jam,jelly);System.out.println(britishToAmerican.get(aubergine);/eggplant BiMap americanToBritish=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不能有重复,且
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1