Guava是一组来自谷歌的核心Java库,包括新的集合类型(如multimap和multiset)、不可变集合、图形库,以及用于并发、IO、哈希、缓存、原语、字符串等的实用工具!它在谷歌内部的大多数Java项目中被广泛使用,也被许多其他公司广泛使用。传送门 做人怎么可以不留传送门呢。 github:https:github。comgoogleguava github文档:https:github。comgoogleguavawikiHome 中文教程:http:ifeve。comgoogleguava ps:有没有发现国内写得像模像样的介绍大部分是从github上翻译过来的。Objects 对象equals比较,不需要担心哪个对象在前面、为空造成的空指针;Objects。equal(a,b)SpliterJoiner 字符串的分割及连接处理Stringmsgzhangsan,lisi,wangwu,,,;System。out。println(msg);ListStringlistSplitter。on(,)初始化分隔符。trimResults()去掉前后的空格。omitEmptyStrings()去除空字符串。splitToList(msg);设置要分割的字符串System。out。println(list);msgJoiner。on()初始化分隔符。skipNulls()去除空字符串。join(list);设置要连接的listSystem。out。println(msg); 结果信息zhangsan,lisi,wangwu,,,〔zhangsan,lisi,wangwu〕zhangsanlisiwangwuHashMutilmap 复合结构的HashMap,见过这样的结构吗,HashMapString,ListString,现在可以不用这么写了,可以直接用HashMutlmapString,String,通过get方式获取到的就是集合的结果;HashMultimapString,StringmultimapHashMultimap。create();multimap。put(key1,value1);multimap。put(key1,value2);multimap。get(key1)。forEach(System。out::println); guava里面同类型的支持更多的类型,如ArrayListMultimap,LinkedListMultimapSortedMap 我在项目中经常遇到这种情况,在两个系统交互是参数信息需要按照字母顺序排序后签名或加密处理,这个时候可以使用SortedMap的处理了HashMapString,StringnamesnewHashMap();names。put(zhangsan,张三);names。put(lisi,李四);names。put(wangwu,王五);ImmutableSortedMapString,StringsortedMapImmutableSortedMap。copyOf(names);sortedMap。forEach((k,v)System。out。println(kv));ImmutableSortedMapString,IntegersalarynewImmutableSortedMap。BuilderString,Integer(Ordering。natural())。put(John,1000)。put(Jane,1500)。put(Adam,2000)。put(Tom,2000)。build();salary。forEach((k,v)System。out。println(kv));集合工具类ArrayListStringlistLists。newArrayList();ArrayListStudentlist2Lists。newArrayList();HashSetStringsetSets。newHashSet();HashMapString,StudentmapMaps。newHashMap();基本类型intminInts。min(1,2,3);最大值最小值booleanisEmptyStrings。isNullOrEmpty(student。getName());非空判断Bytes。concat(byte1,byte2)字节数组合并CharMatcher 字符串的匹配处理,该类中有丰富的字符串匹配处理,不过我用得很少,用得最多的是去除所有的换行tab字符CharMatcher。JAVAISOCONTROL。removeFrom(string) 更多操作可以看一下官方说明: https:github。comgoogleguavawikiStringsExplainedcharmatcher反射和缓存 这两部分在实际使用中用处也很大,奈何有其他的更好的反射和缓存框架了,这个有空再说吧。dependencygroupIdorg。reflectionsgroupIdreflectionsartifactIdversion0。9。12versiondependencydependencygroupIdcom。github。benmanes。caffeinegroupIdcaffeineartifactIdversion3。0。3versiondependency听着好听但没用到的Optional 常用的用法就是做非空判断,让代码看起来好看一点儿 虽然Guava里面有这个类,但JDK8里面也实现了该处理,不做多说; 改天再详细说JDK8里面的用法;Preconditions 内置的前置条件判断方法,主要是通过抛出异常的方式进行有效性验证,其实在实际开发中很鸡肋,完全可以用JDK自带的功能,再辅以业务判断,拒绝通过异常的方式处理问题;Ordering 基本没用到的比较器Throwables 没有用到过 你看,奇怪的知识是不是又增加了