Google Guava
guava开源库的地址:github.com/google/guav…
概述
工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。所以就诞生了guava。
guava的优点:
- 高效设计良好的API,被Google的开发者设计,实现和使用
- 遵循高效的java语法实践
- 使代码更刻度,简洁,简单
- 节约时间,资源,提高生产力
guava的核心库:
- 集合 [collections]
- 缓存 [caching]
- 原生类型支持 [primitives support]
- 并发库 [concurrency libraries]
- 通用注解 [common annotations]
- 字符串处理 [string processing]
- I/O 等等。
guava的使用
引入gradle依赖(引入Jar包)
1 | java复制代码compile 'com.google.guava:guava:26.0-jre' |
1 | java复制代码 <dependency> |
1.集合的创建
1.1
1 | java复制代码// 普通Collection的创建 |
创建不可变集合 先理解什么是immutable(不可变)对象
- 在多线程操作下,是线程安全的
- 所有不可变集合会比可变集合更有效的利用资源
- 中途不可改变
1 | java复制代码ImmutableList<String> immutableList = ImmutableList.of("1","2","3","4"); |
这声明了一个不可变的List集合,List中有数据1,2,3,4。类中的 操作集合的方法(譬如add, set, sort, replace等)都被声明过期,并且抛出异常。 而没用guava之前是需要声明并且加各种包裹集合才能实现这个功能
1 | java复制代码 // add 方法 |
1.2
当我们需要一个map中包含key为String类型,value为List类型的时候,以前我们是这样写的
1 | java复制代码Map<String,List<Integer>> map = new HashMap<String,List<Integer>>(); |
现在
1 | java复制代码Multimap<String,Integer> map = ArrayListMultimap.create(); |
1.3
1 | java复制代码MultiSet: 无序+可重复 count()方法获取单词的次数 增强了可读性+操作简单 |
2.特色工具
字符串连接器Joiner
连接多个字符串并追加到StringBuilder
1 | java复制代码 StringBuilder stringBuilder = new StringBuilder("hello"); |
连接List元素并写到文件流
1 | java复制代码 FileWriter fileWriter = null; |
字符串分割器Splitter
将字符串分割为Iterable
1 | java复制代码 // 分割符为|,并去掉得到元素的前后空白 |
结果为:
hello
world
your
Name
字符串工具类Strings
1 | java复制代码 System.out.println(Strings.isNullOrEmpty("")); // true |
字符匹配器CharMatcher
空白一一替换
1 | java复制代码 // 空白回车换行对应换成一个#,一对一换 |
连续空白缩成一个字符
1 | java复制代码 // 将所有连在一起的空白回车换行字符换成一个#,倒塌 |
去掉前后空白和缩成一个字符
1 | java复制代码// 在前面的基础上去掉字符串的前后空白,并将空白换成一个# |
保留数字
1 | java复制代码 String letterAndNumber = "1234abcdABCD56789"; |
3.将集合转换为特定规则的字符串
3.1以前我们将list转换为特定规则的字符串是这样写的:
1 | java复制代码//use java |
3.2把map集合转换为特定规则的字符串
1 | java复制代码Map<String, Integer> map = Maps.newHashMap(); |
4.将String转换为特定的集合
1 | java复制代码//use java |
guava还可以使用 omitEmptyStrings().trimResults() 去除空串与空格
1 | java复制代码String str = "1-2-3-4- 5- 6 "; |
将String转换为map
1 | java复制代码String str = "xiaoming=11,xiaohong=23"; |
5.guava还支持多个字符切割,或者特定的正则分隔
1 | java复制代码String input = "aa.dd,,ff,,."; |
关于字符串的操作 都是在Splitter这个类上进行的
1 | java复制代码// 判断匹配结果 |
6. 集合的过滤
我们对于集合的过滤,思路就是迭代,然后再具体对每一个数判断,这样的代码放在程序中,难免会显得很臃肿,虽然功能都有,但是很不好看。
guava写法
1 | java复制代码import com.google.common.base.*; |
set的交集, 并集, 差集
1 | java复制代码HashSet setA = newHashSet(1, 2, 3, 4, 5); |
map的交集,并集,差集
1 | java复制代码HashMap<String, Integer> mapA = Maps.newHashMap(); |
7.检查参数
1 | java复制代码//use java |
免去了很多麻烦!并且会使你的代码看上去更好看。而不是代码里面充斥着 !=null, !=””
==检查是否为空,不仅仅是字符串类型,其他类型的判断,全部都封装在 Preconditions类里,里面的方法全为静态==
其中的一个方法的源码
1 | java复制代码@CanIgnoreReturnValue |
8. MoreObjects
这个方法是在Objects过期后官方推荐使用的替代品,该类最大的好处就是不用大量的重写 ==toString==,用一种很优雅的方式实现重写,或者在某个场景定制使用。
1 | java复制代码Person person = new Person("aa",11); |
9.强大的Ordering排序器
排序器[Ordering]是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。
1 | java复制代码natural() 对可排序类型做自然排序,如数字按大小,日期按先后排序 |
示例
1 | java复制代码Person person = new Person("aa",14); //String name ,Integer age |
10.计算中间代码的运行时间
1 | java复制代码import com.google.common.base.Stopwatch; |
11.文件操作
1 | java复制代码File file = new File("test.txt"); |
12.guava缓存
==guava的缓存设计的比较巧妙,可以很精巧的使用。guava缓存创建分为两种,一种是CacheLoader,另一种则是callback方式==
CacheLoader:
1 | java复制代码LoadingCache<String,String> cahceBuilder=CacheBuilder |
api中已经把apply声明为过期,声明中推荐使用get方法获取值
关注公众号“程序员面试之道”
回复“面试”获取面试一整套大礼包!!!
本公众号分享自己从程序员小白到经历春招秋招斩获10几个offer的面试笔试经验,其中包括【Java】、【操作系统】、【计算机网络】、【设计模式】、【数据结构与算法】、【大厂面经】、【数据库】期待你加入!!!
本文转载自: 掘金