Guava里一些比较常用的工具

发布于:2024-04-15 ⋅ 阅读:(172) ⋅ 点赞:(0)

随着java版本的更新提供了越来越多的语法和工具来简化日常开发,但是我们一般用的比较早的版本所以体验不到。这时就用到了guava这个包。guava提供了很多方便的工具方法,solar框架就依赖了guava的16.0.1版本,这里稍微介绍下。

一、集合工具类

平常有时候会在初始化类时候创建一些含有数值的集🈴属性,或者在调用方法传参时候需要自己创建一个集🈴,然后添加需要的东西进去之后将集🈴作为参数传给方法。就像下面这样:
在这里插入图片描述

这里不管是在构造方法里面设值还是创建一个list,将需要的东西add进去之后再作为参数调用method都非常麻烦。如果用guava,改成下面这样就可以了:
在这里插入图片描述

这里的ImmutableMap创建的是一个不可变的Map,对他调用put方法会报错。如果需要可变Map,可以用MapsnewHashMap()重新包装下就好了。 另外guava还包含很多关他集🈴类型:比如支持多个相同值的Multiset
在这里插入图片描述

另外还有支持单keyvalueMultimap,或者Table这样的支持行列查找的集🈴类等等

二、缓存

guava提供了一些非常方便的Cache组件,比如获取时如果为空则根据提供的实现创建或者获取一个Value返回的LoadingCache,像下面这样可以创建一个在value没有其他强引用时直接能被回收的缓存
在这里插入图片描述

这里get时候如果cache里面为null,则会通过提供的CacheLoader实现返回一个value。另外,还有支持指定最多size或者最多weight的缓存,当超过最多限制时候会自动去掉最早的键值对
在这里插入图片描述

以及定时的cache来支持指定读写操作之后多少时间清理掉这个键值对
在这里插入图片描述

三、ListenableFuture

有时候我们会建立一个ExecutorService去做一些事情,但是在把任务提交后就只能干等却任务不知道什么时候完成,如果想在任务完成后做一些回调之类的事情就会很麻烦。guava提供了ListenableFuture这么个东西,比java自带的Future要好用很多。
在这里插入图片描述
在这里插入图片描述
另外还有支持设置返回结果或者异常的SettableFuture以及支持将抛出的异常转成自定义受检异常的CheckedFuture等。

四、事件总线

事件总线提供了对数据发布订阅的支持。
在这里插入图片描述

任何一个订阅了特定类型的方法被注册后,都能接收到post出来的特定类型数据,这样方便了模块之间解耦🈴,使用起来非常方便。并且可以做到像第三节讲的,在线程完成一个任务后将数据post出去执行回调。存在的问题是订阅点多的话要找到这个事件对应的订阅处理方法比较困难。 另外guava还提供了AsyncEventBus,支持异步的分发事件方式,这样就不用等之前的事件处理完成再进行下一个分发了。

五、其他

guava还提供了很多方便使用的工具类,比如支持文件遍历,获取文件的文件名或者后缀,获取文件流的Files工具类;以及提供一些javaMath里没有的额外的数学运算方法,或者更有效率实现方式的数学运算工具类,(Int|Long|Double)Math等。


网站公告

今日签到

点亮在社区的每一天
去签到