当前位置: 首页 > news >正文

Guava里一些比较常用的工具

随着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等。

http://www.lryc.cn/news/338690.html

相关文章:

  • 在windows系统中【.gz.tar】和【.whl】文件分别应该怎么下载到conda的某个虚拟环境中
  • Rust - 数据类型
  • 基于springboot实现洗衣店订单管理系统项目【项目源码+论文说明】计算机毕业设计
  • Java基础知识总结(53)
  • 196算法之谜在 JSP 中使用内置对象 request 获取 form 表单的文本框 text 提交的数据。
  • 初识责任链模式--一起学习吧之数据库
  • 解决Xshell登录云服务器的免密码和云服务器生成子用户问题
  • webRtc生产环境实用方法
  • Java String、StringBuffer
  • LangChain调用tool集的原理剖析(包懂)
  • 如何正确使用数字化仪前端信号调理?(一)
  • 实验5 流程图和盒图ns图
  • [Java、Android面试]_18_详解Handler机制 常见handler面试题(非常重要,非常高频!!)
  • 国内开通gpt会员方法
  • 使用 Meltano 将数据从 Snowflake 导入到 Elasticsearch:开发者之旅
  • 第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏,又增加了哔哩哔哩搜索和必应搜索
  • 二极管分类及用途
  • 文献阅读:Viv:在 web 上多尺度可视化高分辨率多重生物成像数据
  • SpringBoot整合Logback日志框架
  • 知识图谱与人工智能:携手共进
  • 全栈的自我修养 ———— react实现滑动验证
  • <<、>>和>>>
  • 【C++进阶】RAII思想&智能指针
  • 探索量子计算:打开未来技术的大门
  • C++11 设计模式2. 简单工厂模式
  • RabbitMQ-死信队列常见用法
  • 2024/4/14周报
  • MySQL 社区版 安装总结
  • 二叉排序树的增删改查(java版)
  • linux下coredump问题的定位分析方法