当前位置: 首页 > 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…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...