2020的Google Guava拾遗

背景

曾经大名鼎鼎的Guava现在应用的人感觉越来越少了,新人普遍只了解spring boot+mybatis的CURD操作,当然这里面原因很多,有不少的原因随着时间的流逝匀Guava功能和设计理念都被吸纳到JDK中,比如Optional和钻石操作符等等,还有不少专一框架的崛起让Guava看其来有一些鸡肋。但Guava还是由非常强大的,而且其特有的轻量化特点,可以让我们不需要运行另一个程序就能达成目标。所以个人在这里推荐几个还不错的工具,有兴趣的可以去官网看看。还有这里也不错。

推荐工具

补充集合

只要你用过Java做过开发,那么你一定用过Map,Set,List等集合类,这些Java原生集合其实挺好用的,但有些场景往往不是很够。这时候你大部分情况下只能自己动手实现一个工具,一般这个工具都会有这种那种的问题。但有了Guava,你有了其他选择,它为你提供了不少趁手的集合,肯定能解决一些你以前的问题。

Multiset

一个可以重复元素的Set,其实也是一个没有顺序的List.那么它有什么特别之处呢。

  1. 可以方便的让我们计数,
  2. 可以方便的取出不重复的元素
  3. 占用的内存与不重复元素的个数成正比。
    有了它,可以摆脱如下重复的代码了。
Map<String, Integer> counts = new HashMap<String, Integer>();
for (String word : words) {
    Integer count = counts.get(word);
    if (count == null) {
        counts.put(word, 1);
    } else {
        counts.put(word, count + 1);
    }
}

对了根据你的需求还提供了不同的具体实现

BiMap

一个支持双向映射的Map。同样的功能,你需要维护两个Map,同时小心翼翼的处理增删改的操作。使用inverse()来翻转。
同时也提供了Hash,immutable,Enum,Enumhash这几个实现来供你选择。

Table

相应你有时候也会遇到需要一个类似于表格的结构吧,当然你可以使用一个list,但是查询时只能做历遍,数量稍大这个时间复杂度就上来了。这时你可能会想使用Map<K1,Map<K2,V>>的结构,这时你就可以使用Table集合。

Table<Vertex, Vertex, Double> weightedGraph = HashBasedTable.create();
weightedGraph.put(v1, v2, 4);
weightedGraph.put(v1, v3, 20);
weightedGraph.put(v2, v3, 5);

weightedGraph.row(v1); // returns a Map mapping v2 to 4, v3 to 20
weightedGraph.column(v3); // returns a Map mapping v1 to 20, v2 to 5

缓存Cache

选择使用Guava Cache的原因有很多,很可能你需要一个支持自动过期但又不想搞一个Redis且处理那让人头疼的序列化与反序列化问题时。
Guava Cache优势:

  1. 轻量级使用简单,不需要单独启动
  2. 清理机制高度可定制
  3. 支持回调
  4. 不需要序列化和反序列化

什么情况下你不能使用Guava Cache

  • 你要存储的数据很大,或可能很大,很可能会带来很大的内存压力
  • 你需要跨进程甚至跨机器获取缓存的数据

事件总线Event Bus

一个基于注解的发布-订阅模式的事件总线。
你可以将EventBus注册到Spring中,获得单例,单后在各个容器中注册。最后通过@Subscribe来完成订阅。实力代码如下。

// Class is typically registered by the container.
class EventBusChangeRecorder {
    @Subscribe public void recordCustomerChange(ChangeEvent e) {
        recordChange(e.getChange());
    }
}
// somewhere during initialization
eventBus.register(new EventBusChangeRecorder());
// much later
public void changeCustomer() {
    ChangeEvent event = getChangeEvent();
    eventBus.post(event);
}

数学工具类

Guava的数学工具你也应该使用,如果你在Java中计算过比较多的数学公示的话,那么来回来去的Double转换应该给你留下过深刻印象。
有了Guava Math你可以使用IntMath.sqrt(int,mode)方便的计算。而且效率也据说很高。

字符串处理

Spring自带的字符串处理工具类也挺好使用的,但比起Guava的Splitter和Joiner还是差了点。这个就不详细说了,去使用一下就知道啦。

总结

目前来说工具类越来越多,并没有说缺了Guava就实现不了的东西,但Guava往往能给你带来一些惊喜,更加简单易用,更加轻量级,所以还是推荐大家关注一下。

参考

http://ifeve.com/google-guava-newcollectiontypes/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值