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

Guava常用方法

目录

一、数学和数值操作

二、并发库

三、缓存

 四、集合

 五、I/O 与文件操作

 六、网络

 七、时间处理

 八、事件总线

九、反射

 十、范围和集合操作

 十一、随机数和测试

 十二、注解处理

 十三、比较器和排序

 十四、哈希和散列


  • Guava 是 Google 开源的一个 Java 工具库,它提供了很多 Java 标准库中没有的便利工具和功能。上面的代码示例已经涵盖了 Guava 的一些核心功能,但 Guava 库的用途远不止这些。以下是一些其他的 Guava 特性和组件,可以作为补充:

一、数学和数值操作


  • IntsLongsDoubles 等类提供了对基本数值类型的操作,如比较器、排序、最小最大值等。
// 代码如下
import com.google.common.primitives.Ints;// 使用 Ints 类获取最小值
int min = Ints.min(1, 3, 2);
System.out.println("Min value: " + min); // 输出: 1

二、并发库


  • AbstractFuture 和 ListenableFuture 等类提供了对异步编程的支持。
  • RateLimiter 类用于控制对资源的访问速率。
// 代码如下
import com.google.common.util.concurrent.RateLimiter;// 创建一个速率限制器
RateLimiter rateLimiter = RateLimiter.create(1.0); // 每秒一个操作
rateLimiter.acquire(); // 请求一个操作

三、缓存


  • CacheBuilder 不仅可以创建简单的缓存,还可以实现复杂的缓存策略,如自动过期、软引用和弱引用缓存等。
// 代码如下
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;LoadingCache<String, String> cache = CacheBuilder.newBuilder().maximumSize(100).build(CacheLoader.from(key -> {// 模拟数据库查询return "Value for " + key;}));String value = cache.get("key1"); // 从缓存获取,或者执行加载逻辑

 四、集合


  • MultisetMultimapBiMap 等类提供了对集合的扩展,支持多值映射和双向映射。
  • Table 类提供了一种存储和操作二维数据的方式。
// 代码如下
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;// 创建双向映射
BiMap<String, Integer> map = HashBiMap.create();
map.put("one", 1);
map.put("two", 2);Integer value = map.get("one"); // 获取值
String key = map.inverse().get(2); // 通过值获取键

 五、I/O 与文件操作


  • Files 类提供了文件读写、文件属性获取等操作。
  • ByteSourceCharSource 等类提供了对字节和字符流的操作。
// 代码如下
import com.google.common.io.Resources;// 读取网络资源
String content = Resources.toString(Resources.getResource("http://example.com/file.txt"),Charsets.UTF_8
);

 六、网络

  • HttpTransport 和 UrlFetch 类提供了对 HTTP 请求的支持。
// 代码如下
import com.google.common.net.HttpTransportFactory;// 使用 UrlFetch 进行 HTTP 请求
String url = "http://example.com";
String response = HttpTransportFactory.create().fetch(url).execute().parseAsString();

 七、时间处理


  • Stopwatch 类用于测量代码段的执行时间。
  • TimeLimiter 类可以对操作设置时间限制。
// 代码如下
import com.google.common.base.Stopwatch;// 使用 Stopwatch 测量时间
Stopwatch stopwatch = Stopwatch.createStarted();
// 执行一些操作...
stopwatch.stop();
System.out.println("Elapsed time: " + stopwatch.elapsed());

 八、事件总线


  • EventBus 类支持发布-订阅模式的事件处理。
// 代码如下
import com.google.common.eventbus.EventBus;// 创建事件总线并发布事件
EventBus eventBus = new EventBus();
eventBus.post("Event message");

九、反射

  • ClassPath 类用于扫描类路径下的类和资源。
// 代码如下
import com.google.common.reflect.ClassPath;// 扫描类路径下的类
ClassPath classPath = ClassPath.from(getClassLoader());
ImmutableSet<ClassInfo> allClasses = classPath.getAllClasses();

 十、范围和集合操作

  • Range 类用于表示和操作有序值的范围。
  • Iterables 和 Collections2 类提供了一系列静态方法来增强集合的操作。

// 代码如下
import com.google.common.collect.Range;// 使用 Range 表示范围
Range<Integer> range = Range.closed(1, 5);
boolean contains = range.contains(3); // 检查是否包含某个值

 十一、随机数和测试

  • Randoms 类提供生成随机数的方法。
  • MoreAsserts 类提供额外的断言方法,用于测试。

// 代码如下
import com.google.common.reflect.TypeToken;
import java.lang.reflect.Type;// 使用 TypeToken 处理泛型类型
Type type = new TypeToken<List<String>>(){}.getType();

 十二、注解处理

  • Annotations 类提供对注解的操作。

// 代码如下
import com.google.common.reflect.TypeToken;
import java.lang.reflect.Type;// 使用 TypeToken 处理泛型类型
Type type = new TypeToken<List<String>>(){}.getType();

 十三、比较器和排序

  • Ordering 类提供灵活的比较器和排序功能。

// 代码如下
import com.google.common.collect.Ordering;// 使用 Ordering 进行排序
List<String> list = Arrays.asList("Alice", "Bob", "Charlie");
Ordering<String> naturalOrder = Ordering.natural();
List<String> sortedList = naturalOrder.sortedCopy(list);

 十四、哈希和散列

  • Hash 类提供哈希相关的操作。

// 代码如下
import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;// 使用 HashFunction 进行哈希计算
HashFunction hashFunction = Hashing.murmur3_32();
String string = "hello";
HashCode hashCode = hashFunction.hashString(string, Charsets.UTF_8);

 

相关文章:

Guava常用方法

目录 一、数学和数值操作 二、并发库 三、缓存 四、集合 五、I/O 与文件操作 六、网络 七、时间处理 八、事件总线 九、反射 十、范围和集合操作 十一、随机数和测试 十二、注解处理 十三、比较器和排序 十四、哈希和散列 Guava 是 Google 开源的一个 Java 工具库&#xff…...

干货分享:宏集物联网HMI通过S7 MPI协议采集西门子400PLC数据

前言 为了实现和西门子PLC的数据交互&#xff0c;宏集物联网HMI集成了S7 PPI、S7 MPI、S7 Optimized、S7 ETH等多个驱动来适配西门子200、300、400、1200、1500、LOGO等系列PLC。 本文主要介绍宏集HMI通过S7 MPI协议采集西门子400PLC数据的操作步骤&#xff0c;其他协议的操作…...

【Web API DOM11】节点操作

目录 一&#xff1a;DOM节点 1 什么是DOM节点 2 DOM节点分类 二&#xff1a;节点查找&#xff08;元素节点&#xff09; 1 节点关系 父节点 子节点 兄弟节点 三&#xff1a;增加节点 1 创建节点 2 追加节点 2 案例&#xff1a;渲染数据 案例中核心代码块 样式 四…...

Unity 设置窗口置顶超级详解版

目录 前言 一、user32.dll 1.什么是user32.dll 2.如何使用user32.dll 二、句柄Handle 1.句柄 2.句柄的功能 3.拿句柄的方法 三、窗口置顶 1.窗口置顶的方法 2.参数说明 3.使用方法 四、作者的碎碎念 前言 up依旧挑战全网讲解最详细版本~~ 本篇文章讲解的是unity…...

编程后端:深入探索其所属的行业领域

编程后端&#xff1a;深入探索其所属的行业领域 在数字化浪潮席卷全球的今天&#xff0c;编程后端作为技术领域的重要分支&#xff0c;其所属的行业领域一直备受关注。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入剖析编程后端所属的行业&#xff0c;并揭…...

ubuntu18.04离线源制作

给客户部署有时需要纯内网环境&#xff0c;那这样就连不了网络。 一些包就下载不下来&#xff0c;而大家都知道用deb离线安装是非常麻烦的&#xff0c;各种依赖让你装不出来。 这里教大家打包源。 我准备2台机器&#xff0c;42和41 42可以联网&#xff0c;41不能联网。我想在…...

【DPDK学习路径】八、轮询

前面我们已经了解了如何使用DPDK创建线程并绑定核心&#xff0c;以及如何申请内存池并创建 RX/TX 队列。 接下来我们将了解DPDK的核心内容之一&#xff1a;以轮询的方式从网卡中收取报文。 下面直接给出一个实例&#xff0c;此实例使用核心1及核心2创建了两个线程用于报文处理&…...

Mac环境下,简单反编译APK

一、下载jadx包 https://github.com/skylot/jadx/releases/tag/v1.4.7 下载里面的这个&#xff1a;下载后&#xff0c;找个干净的目录解压&#xff0c;我是放在Downloads下面 二、安装及启动 下载和解压 jadx&#xff1a; 下载 jadx-1.4.7.zip 压缩包。将其解压到你希望的目…...

027、工具_redis-benchmark

redis-benchmark可以为Redis做基准性能测试 1.-c -c(clients)选项代表客户端的并发数量(默认是50)。 2.-n -n(num)选项代表客户端请求总量(默认是100000)。 例如redis-benchmark-c100-n20000代表100各个客户端同时请求Redis,一 共执行20000次。 redis-benchmark会…...

京准电钟 | 对比GPS,北斗卫星授时的场景有哪些?

京准电钟 | 对比GPS&#xff0c;北斗卫星授时的场景有哪些&#xff1f; 京准电钟 | 对比GPS&#xff0c;北斗卫星授时的场景有哪些&#xff1f; 对比国外的GPS&#xff0c;我国北斗卫星授时由于其高精度和稳定性&#xff0c;在各个领域都有广泛的应用场景。 以下是一些单北斗卫…...

电脑桌面提醒做事的app 好用的桌面提醒app

在快节奏的现代生活中&#xff0c;我们每天都要通过电脑处理大量的工作事项。然而&#xff0c;繁忙的工作节奏有时会导致我们遗忘某些重要任务&#xff0c;从而带来不必要的损失。为了避免这种情况&#xff0c;选择一款好用的桌面提醒app显得尤为重要。 想象一下&#xff0c;你…...

ICC2:如何获取get_xx -filter后可用的属性有哪些?

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 report_attribute -app -class cell $instname 这种直接告诉你指定cell有哪些属性&#xff0c;以及对应的值是什么 或者直接用list_attribute也可以 list_attribute -help可以…...

SSL协议在实际生活中有哪些应用实例?

SSL协议的实际应用案例 SSL&#xff08;Secure Sockets Layer&#xff09;协议是一种网络通信协议&#xff0c;用于在客户端和服务器之间建立加密链接&#xff0c;以确保数据在传输过程中的安全性。尽管SSL协议已被TLS&#xff08;Transport Layer Security&#xff09;协议所取…...

Python连接到Jira实例、登录、查询、修改和创建bug

Python连接到Jira实例、登录、查询、修改和创建bug 首先&#xff0c;你需要安装jira Python库 pip install jira1. 连接到Jira并登录 from jira import JIRA from jira.exceptions import JIRAError# Jira服务器地址&#xff0c;用户名和密码 jira_server https://your-jir…...

等保测评考试初级题大题部分

主机安全问答&#xff1a; 在主机安全测评前期调研活动中&#xff0c;收集信息的内容&#xff08;至少写出六项&#xff09;&#xff1f; 在选择主机测评对象时应该注意哪些要点&#xff1f; 主机安全回答&#xff1a; 至少需要收集服务器主机的设备名称、型号、所属网络区…...

【前端面试】动态表单篇

问题&#xff1a;什么是动态表单&#xff1f; 动态表单是一种可以根据用户的输入或者选择&#xff0c;动态改变其结构和元素的表单。比如&#xff0c;当用户在一个下拉列表中选择不同的选项时&#xff0c;表单中可能会出现不同的输入框、复选框、单选按钮等。 问题&#xff1a…...

Mybatis save、saveOrUpdate、update的区别

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 1. save方法 Mybatis的save方法用于插入一条新的记录。当数据库中不存在相同的记录时&#xff0c;会执行插入操作&#xff1b;如果已经存在相同的记录&#xff0c;则会抛出异常。 int result sqlSession.insert(&…...

立创·天空星开发板-GD32F407VE-Timer

本文以 立创天空星开发板-GD32F407VET6-青春版 作为学习的板子&#xff0c;记录学习笔记。 立创天空星开发板-GD32F407VE-Timer 定时器基本定时器示例 定时器 定时器是嵌入式系统中常用的一种外设&#xff0c;它可以产生一定的时间间隔、延时、定时等功能&#xff0c;广泛应用于…...

赚流量卷,晚点删

自己封装ajax方法 import ajax from /libs/ajax; import qs from "qs"; import Config from /config; import { getProtocolAndHostname } from /libs/util;const AjaxPlugin {}; // const baseUrl process.env.NODE_ENV development ? Config.baseUrl.dev : Co…...

36、matlab矩阵特征值、特征向量和奇异值

1、名词说明 1)特征值 特征值&#xff08;Eigenvalues&#xff09;是矩阵的一个重要概念&#xff0c;在线性代数中起着非常重要的作用。给定一个nn的方阵A&#xff0c;如果存在一个非零向量v&#xff0c;使得矩阵A作用于向量v后&#xff0c;得到的结果与向量v成比例&#xff…...

建筑消防防火分区专用钢质卷帘门

在现代建筑消防设计体系中&#xff0c;防火分区的科学划分与有效分隔&#xff0c;是控制火灾蔓延、减少人员伤亡与财产损失的核心环节。建筑消防防火分区专用钢质卷帘门&#xff0c;作为固定式防火分隔的重要配套设施&#xff0c;凭借稳定的耐火性能、可靠的启闭功能与强适配性…...

2025届学术党必备的六大AI科研方案推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于当下&#xff0c;各类文献产出需求呈现出多元态势&#xff0c;一键生成论文功能作为辅助工…...

nslookup-mcp:基于MCP协议的DNS查询工具部署与实战指南

1. 项目概述&#xff1a;一个为安全与开发场景设计的DNS查询工具如果你经常需要排查网络问题、分析域名配置&#xff0c;或者像我一样&#xff0c;在渗透测试或安全研究时&#xff0c;需要快速、批量地查询DNS记录&#xff0c;那么命令行里的nslookup或dig工具可能已经让你感到…...

node.js、node、nvm、npm、npx的关系

1、node.js Node.js&#xff1a;一个基于Chrome V8引擎的JavaScript运行环境。Node.js是一个开源的、跨平台的JavaScript运行环境&#xff0c;用于在服务器端运行JavaScript代码。它使得开发人员可以使用JavaScript来编写服务器端应用程序&#xff0c;从而简化了开发过程&#…...

通过Taotoken CLI工具一键为团队统一配置开发环境

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken CLI工具一键为团队统一配置开发环境 在团队协作开发中&#xff0c;为新成员配置统一的AI模型调用环境常常是个繁琐的…...

Unity Addressable系统面板配置避坑指南:从Profile到Content Update,新手必看的10个关键设置

Unity Addressable系统配置避坑实战&#xff1a;10个关键设置详解 Addressable系统作为Unity资源管理的重要工具&#xff0c;其配置面板的复杂性常常让开发者望而生畏。本文将聚焦实际项目中最容易出错的10个关键设置&#xff0c;从Profile到Content Update&#xff0c;逐一剖…...

别再死记硬背了!用STM32H7的USB CDC类实战,反向理解USB协议栈核心概念

从实战出发&#xff1a;用STM32H7的USB CDC类逆向掌握协议栈精髓 当开发板上的LED第一次随着串口指令闪烁时&#xff0c;我意识到USB协议栈不再是手册里晦涩的名词——端点成了数据管道&#xff0c;描述符变身设备身份证&#xff0c;而曾经令人头疼的HID报告突然有了具象意义。…...

3分钟掌握罗技鼠标宏:PUBG自动压枪脚本终极指南

3分钟掌握罗技鼠标宏&#xff1a;PUBG自动压枪脚本终极指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为《绝地求生》中难以控制的枪械…...

从理论到仿真:深入解读Walker星座设计,用STK验证你的卫星通信作业

从理论到仿真&#xff1a;深入解读Walker星座设计&#xff0c;用STK验证你的卫星通信作业 卫星通信系统的设计从来不是纸上谈兵。当你在教科书上看到那些优美的轨道方程和覆盖计算公式时&#xff0c;是否想过如何将它们转化为真实的系统性能验证&#xff1f;这正是STK&#xff…...

从零部署Discord AI聊天机器人:基于ChatGPT API与Firestore的实践指南

1. 项目概述&#xff1a;打造一个属于你自己的Discord AI聊天机器人 如果你在运营一个Discord社区&#xff0c;无论是游戏公会、技术讨论组还是兴趣社团&#xff0c;肯定遇到过这样的场景&#xff1a;成员们总有一些稀奇古怪的问题&#xff0c;或者需要一个随时在线的“智能助…...