google java 开源_Java google为java开发提供的开源开发工具---guava深入手册

一、Joiner/Splitter

Joiner是连接器,Splitter是分割器,通常我们会把它们定义为static final,利用on生成对象后在应用到String进行处理,这是可以复用的。

对于Joiner,常用的方法是:

跳过NULL元素:skipNulls()

对于NULL元素使用其他替代:useForNull(String)

对于Splitter,常用的方法是:

分割结果进行trim()操作:trimResults()

分割结果去除无内容的字符串:omitEmptyStrings()

注意拆分的方式,有字符串,还有正则,还有固定长度分割(太贴心了!)

8fe5bb96753e5b0c43adac60f23af1ea.png

二、CharMatcher

CharMatcher,将字符的匹配和处理解耦,并提供丰富的方法供你使用!

对基本类型进行支持

guava对JDK提供的原生类型操作进行了扩展,使得功能更加强大!

三、Ints

guava提供了Bytes/Shorts/Ints/Iongs/Floats/Doubles/Chars/Booleans这些基本数据类型的扩展支持,只有你想不到的,没有它没有的!

对JDK集合的有效补充

5919aec95aef8274a01d96ca581b0b92.png

四、Multiset

Multiset是什么,我想上面的图,你应该了解它的概念了。Multiset就是无序的,但是可以重复的集合,它就是游离在List/Set之间的“灰色地带”!

ac169a68725c9b1bfdaabcadacee8f11.png

结果:

9649205bd7cb2b9c12811685f63c39af.png

五、Immutable

在项目中,我们常常需要初始定义一些不可变的map或者list,jdk中有unmodifiable,但是该集合使用过程中会出现很多不便的地方,所以guava引入Immutable

734e74a22f8fb9dfb31c2fe1c5f0ddc6.png

六、BiMap

JDK提供的MAP让我们可以find value by key,那么能不能通过find key by value呢,能不能KEY和VALUE都是唯一的呢。这是一个双向的概念,即forward+backward。在实际场景中有这样的需求吗?比如通过用户ID找到mail,也需要通过mail找回用户名。没有guava的时候,我们需要create forward map AND create backward map,and now just let guava do that for you.

6200deab852b2b4762d1ea3aac17fb69.png

BiMap中的键值都是唯一的,也是唯一绑定的,所以结果是两个键值对被强制替换成了一个。

c03d7d355c0e2bf8ffb29703877b0b59.png

biMap / biMap.inverse() / biMap.inverse().inverse() 它们是什么关系呢?你可以稍微看一下BiMap的源码实现,实际上,当你创建BiMap的时候,在内部维护了2个map,一个forward map,一个backward map,并且设置了它们之间的关系。因此,biMap.inverse() != biMap ;biMap.inverse().inverse() == biMap

七、Tables

多个键对应着一个值

Table涉及到3个概念:rowKey,columnKey,value,并提供了多种视图以及操作方法让你更加轻松的处理多个KEY的场景。

a4bca3230b97883a9d0bfeee27d74ead.png

记得我刚到成都找工作,当时面试者提出了想要用内存开发一套数据库,这个guava里面的tables简直完美满足了这个需求。

八、Functions、Predicate、filter

熟悉jdk 1.9 的同学看到这几个名词是不是感觉很熟悉,没错,jdk1.9已经这是将这个三个运用到了stream流矢编程中了。lamda表达式和函数式编程。。感觉怎么样?是不是很方便!

九、CacheLoader

jdk内存中生成一个类似redis的缓存。

首先,这是一个本地缓存,guava提供的cache是一个简洁、高效,易于维护的。为什么这么说呢?因为并没有一个单独的线程用于刷新 OR 清理cache,对于cache的操作,都是通过访问/读写带来的,也就是说在读写中完成缓存的刷新操作!其次,我们看到了,我们非常通俗的告诉cache,我们的缓存策略是什么,SO EASY!在如此简单的背后,是guava帮助我们做了很多事情,比如线程安全。

34d145e9fb0a7df798e425142f4c7a03.png

十、异步回调

JDK中提供了Future/FutureTask/Callable来对异步回调进行支持,但是还是看上去挺复杂的,能不能更加简单呢?比如注册一个监听回调。

ebcbc328e227e1377f39a403559c28df.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值