当前位置: 首页 > 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);

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 内网安全--隧道技术代理技术
  • 树莓派 5 AI 套件(Hailo-8L)使用教程
  • unity38——MemoryProfiler性能分析器,截帧分析当前性能占用率的具体文件
  • 【Python】中的X[:,0]、X[0,:]、X[:,:,0]、X[:,:,1]、X[:,m:n]、X[:,:,m:n]和X[: : -1]
  • AWS无服务器 应用程序开发—第九章 文件存储(Amazon S3)
  • 安卓兼容的编程语言有哪些:探索多样化的开发选择
  • Dorkish:一款针对OSINT和网络侦查任务的Chrome扩展
  • Java老人护理上门服务类型系统小程序APP源码
  • 使用Java获取图片MD5编码的方法详解
  • 问题:以下被纳入代理资产风险分类管理的业务包括() #媒体#知识分享
  • kafka-消费者-指定offset消费(SpringBoot整合Kafka)
  • Linux各目录的作用
  • Ubuntu 24.04 屏蔽snap包
  • 高考后志愿填报信息采集系统制作指南
  • [天翼杯 2021]esay_eval
  • github从入门到放弃(1)
  • Hibernate最全面试题
  • pdf文件如何在线转换为jpg图片
  • PHP面试之三:MySQL数据库
  • Puppeteer:浏览器控制器
  • storm drpc实例
  • ubuntu 下nginx安装 并支持https协议
  • Web设计流程优化:网页效果图设计新思路
  • 爱情 北京女病人
  • 闭包--闭包之tab栏切换(四)
  • 对象引论
  • 码农张的Bug人生 - 见面之礼
  • 驱动程序原理
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用 5W1H 写出高可读的 Git Commit Message
  • ​​​​​​​​​​​​​​Γ函数
  • ​如何防止网络攻击?
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (11)MATLAB PCA+SVM 人脸识别
  • (arch)linux 转换文件编码格式
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (WSI分类)WSI分类文献小综述 2024
  • (ZT)一个美国文科博士的YardLife
  • (不用互三)AI绘画工具应该如何选择
  • (分类)KNN算法- 参数调优
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (小白学Java)Java简介和基本配置
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net Core 生成管理员权限的应用程序
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET Framework 3.5安装教程
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET下的多线程编程—1-线程机制概述
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...