
guava实用培训教程.pptx
43页LOGOGuava快速进阶主讲人:陈雄华目录n Guava概述n Stringsn 基础类型n Collectionsn Functions and Predicatesn IO处理n 其它Guava是什么?Google开源核心类库类库 !快乐编乐编 程,快速编编程!高效稳稳定,充分测试测试 !如何获取Guava?com.google.guavaguava12.0 Guava概述n Stringsn 基础类型n Collectionsn Functions and Predicatesn IO处理n 其它Joiner:合并字符串@Testpublic void testJoiner(){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// Apache StringUtils. String[] tokens1= StringUtils.split(“one,two,three“,','); // Google Guava splitter. Iteratable tokens2 = Splitter.on(','),split(“one,two,three“); 很明显,google提供的方法更加的面向对象一点,因为它要先创建一个Splitter 对象,然后使用它来分割字符串,而apache的方法则有点函数式编程的味道, 它的方法都是静态的。
和apache commons StringUtils使用方法比拼Splitter:性能@Testpublic void testPerformance(){final String numberList = “One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten“;long start = System.currentTimeMillis();for(int i=0; i arrs = Splitter.on(',').trimResults() 头尾去除.omitEmptyStrings() 忽略空字符串.split(“,a,,b,“);String str2 = Joiner.on(“;“).join(arrs);assertEquals(str2,“a;b“);}CharMatcher:字符串匹配器CharMatcher包括两个功能,其一是字符串匹配,其二是字符串处理, 它使匹配和处理解耦了,使字符串处理的灵活性大大增强!!@Testpublic void testCharMatcher(){assertEquals(CharMatcher.DIGIT.retainFrom(“some text 89983 and more“),“89983“);assertEquals(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(str1,“**yc*e*“);}目录n Guava概述n Stringsn 基础类型n Collectionsn Functions and Predicatesn IO处理n 其它来看实例@Testpublic void testMe(){List intArr = Ints.asList(1, 3, 4, 6);String intStr = Ints.join(“,“, 1, 2, 3, 4);int[] concat = Ints.concat(new int[]{1, 3}, new int[]{4, 6});int max = Ints.max(2, 3, 4, 7);boolean contains = Ints.contains(new int[]{1, 3, 4, 5}, 6);int[] ints = Ints.toArray(Lists.newArrayList(1, 2, 3, 5));}基础类型通用方法GuavaJDK对应GuavaJDK对应List asList(prim. backingArray)Arrays.asListint lastIndexOf(prim[] array, prim target)List.lastIndexOfprim[] toArray(Collection collection)Collection.toArray()prim min(prim. array)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 lexicographicalComparator ()Ordering.natural().lexicogr aphical()对应工具类基础类 型对应 工具类booleanBooleansbyteBytes charCharsdoubleDoublesfloatFloatsintIntslongLongsshortShorts目录n Guava概述n Stringsn 基础类型n Collectionsn Functions and Predicatesn IO处理n 其它泛型实例化:List@Testpublic 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 String[]{“c“, “d“});泛型实例化:Set@Testpublic 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 String[]{“c“, “d“});一对多之Multimap之前Map> myClassListMap test2 = new HashMap>() void putMyObject(String key, Object value) { List myClassList = myClassListMap.get(key); if(myClassList == null) { myClassList = new ArrayList(); myClassListMap.put(key,myClassList); } myClassList.add(value); } 自己实现太麻烦,你需要检查key是否存在,否则创建一个,最 后代码成为这个样子:比较痛苦,如果你希望检查List中的对象是否存在,删除一个对 象,或者遍历整个数据结构,那么需要更多的代码。
Multimap来了Multimap myMultimap = ArrayListMultimap.create(); @Testpublic void testMultimap(){MultimapmyMultimap=ArrayListMultimap.create();myMultimap.put(“Fruits“,“Bannana“);myMultimap.put(“Fruits“,“Apple“);myMultimap.put(“Fruits“,“Pear“);myMultimap.put(“Vegetables“,“Carrot“);int size= myMultimap.size();System.out.println(size);//4Collection 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 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“,“egg。
