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.mzph.cn/news/816155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 uniapp微信登录

根据最新的微信小程序官方的规定,uniapp中的uni.getUserInfo方法不再返回用户头像和昵称、以及手机号 首先,需获取appID,appSecret,如下图 先调用uni.getUserInfo方法获取code,然后调用后台的api,传入code&…

大模型项目整体规划、技术选型和案例分析经验分享

1 项目整体规划 1.1 明确场景 toB or toC(面向企业还是面向消费者) toB(面向企业):指的是产品或服务主要面向其他企业或组织。这类产品通常需要解决特定的商业问题,强调效率和集成性,并且可能需…

什么是 MVVM、mvc 模型

mvc模型 MVC: MVC 即 model-view-controller(模型-视图-控制器)是项目的一种分层架构思想,它把复杂的业务逻辑, 抽离为职能单一的小模块,每个模块看似相互独立,其实又各自有相互依赖关系。它的好处是:保证了…

如何选择最好的数据恢复软件?最佳免费数据恢复软件集

丢失或删除文件并不意味着它已从您的设备中永久删除。 下次您不小心删除或丢失文件时,请不要惊慌,丢失的文件仍然可以恢复,但前提是您迅速采取行动。 驱动器具有用于存储文件的目录。删除数据需要很长时间,因此您删除的任何文件都…

03-1_Qt 5.9 C++开发指南_番外1_QWidget项目默认代码解析(Qt对象模型:对象树与元对象系统;初始化列表用于调用父类有参构造和初始化)

我们在创建Qt Widgets Application的时候,会默认生成一些代码,本篇主要是对其涉及到的内容进行解析。早期已经在此博文中进行介绍,可以结合理解:QT从入门到实战x篇_02_创建第一个Qt工程 文章目录 1. 创建Qt Widgets Application程…

BetterZip解锁文件处理新境界

在数字化时代的浪潮中,文件处理成为了我们日常生活和工作中不可或缺的一部分。压缩软件,作为文件处理的得力助手,以其出色的压缩性能、便捷的操作体验以及强大的文件管理能力,赢得了广大用户的青睐。在众多压缩软件中,…

npm vs. pnpm vs. Yarn: 三者之间的区别与比较

在现代前端开发中,包管理工具是必不可少的一环。npm、pnpm和Yarn是三个常用的包管理工具,它们各有特点,适用于不同的场景。本文将深入讨论这三者的基本概念、特点、优势和劣势,并对比分析它们之间的主要区别,包括功能、…

热词解析| 制造企业如何跟上新质生产力建设步伐【触想智能】

回顾3月份的网络热词,「新质生产力」在各大平台霸榜刷屏,并且受到两会政府工作报告的频繁聚焦。究竟何为新质生产力?以及,传统制造企业如何加速融入这场火热的现代化产业革新浪潮之中? 图源| 纪录片《加快形成新质生产力》 1、什么是新质生…

2、ipex-llm(原bigdl-llm)应用聊天

ipex-llm环境配置及模型下载 1、加载模型 大量流行的开源PyTorch大语言模型都可以使用Huggingface Transformers API(例如AutoModel, AutoModelForCasualLM 等)来加载。对于这类模型,ipex-llm提供了一套API来支持,接下来展示一下…

TypeScript学习笔记5-类型别名

在 JavaScript 中,类型别名是一种自定义类型的方式,通过关键字 type 来创建。它允许你为现有的类型提供一个更具描述性的名称,从而增强代码的可读性和可维护性。类型别名通常与联合类型(Union Types)或交叉类型&#x…

AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4

原文:AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4 | MLExpert - Crush Your Machine Learning interview In this tutorial, well explore AutoGen1, a Microsoft library that lets you create LLM applications with agents. These agents can communicate and …

PostgreSQL入门到实战-第二十四弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(八)官网地址PostgreSQL概述PostgreSQL中CROSS JOIN命令理论PostgreSQL中CROSS JOIN命令实战更新计划 PostgreSQL中表连接操作(八) 使用PostgreSQL CROSS JOIN从连接的表中生成行的笛卡尔乘积。 官网地址 声明: 由于操作系统, 版…

git commit --amend用法

一、git commit --amend 修改提交信息:您可以使用 git commit --amend 命令来修改最新提交的提交信息。执行该命令后,Git 将会打开文本编辑器(通常是的默认文本编辑器),以便编辑提交信息。完成编辑后保存并关闭编辑器…

数据库(3)

目录 11.那你知道什么是覆盖索引和回表吗? 12.什么是MVCC?说说MySQL实现MVCC的原理? 13.MySQL的锁的类型有哪些呢? 14.你们数据量级多大?分库分表是怎么做的? 15.分表后非分库字段sharding_key的查询怎…

C语言学习笔记之结构体(一)

目录 什么是结构体? 结构体的声明 结构体变量的定义和初始化 结构体成员的访问 结构体传参 什么是结构体? 在现实生活中的很多事物无法用单一类型的变量就能描述清楚,如:描述一个学生,需要姓名,年龄&a…

从零实现诗词GPT大模型:了解自注意力机制

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 这篇文档我们开始对GPT的核心组件Transformer进行一个详细的讲解, 加急编写中…

MR混合现实情景实训教学系统在汽车维修中的应用

首先,该系统能够提供真实的汽车维修场景,使学生能够更直观地了解和掌握汽车维修技能。通过混合现实技术,学生可以在虚拟环境中模拟汽车故障,并使用真实的工具和设备进行维修操作。这不仅可以减少实际车辆的损坏风险,还…

复旦新出!大规模语言模型:从理论到实践,书籍PDF分享

自2018年以来&#xff0c;包含Google、OpenAI、Meta、百度、华为等公司和研究机构都纷纷发布了包括BERT&#xff0c; GPT等在内多种模型&#xff0c;并在几乎所有自然语言处理任务中都表现出色。 今天给大家推荐一本大模型方面的书籍<大规模语言模型&#xff1a;从理论到实…

nginx禁止ip访问,只允许域名访问

无论ip直接访问&#xff0c;还是通过域名访问&#xff0c;最终都是通过ip访问到服务器浏览器访问时会携带Host参数&#xff0c;通过ip访问时携带的是ip&#xff0c;通过域名访问时携带的是域名nginx收到请求后判断host的值&#xff0c;如果判断出不是通过域名访问的则拒绝&…

jupyter切换不同的内核(虚拟环境)(anaconda 24.1.2)

jupyter切换不同的内核&#xff08;anaconda 24.1.2&#xff09; 主要的两条命令&#xff1a; conda install ipykernel python -m ipykernel install --user --name 环境名称 anaconda的版本号 conda --version实例&#xff1a; 一、首先可以看到已经创…