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

Hutool-Guava

目录

一、Guava

二、Hutool

三、区别与联系

四、使用场景

五、Guava工具类

1.集合工具类

2.字符串工具类

3.并发工具类

六、Hutool

1.字符串工具类

2.文件工具类


Hutool 和 Guava 都是 Java 开发中非常实用的工具库,它们提供了许多方便的工具类和方法,简化了常见的编程任务。

一、Guava

Guava 是由 Google 开发并维护的一个开源工具包,它提供了很多强大的集合类、并发工具、缓存机制、原生类型支持、字符串处理、I/O 操作等功能。Guava 的一些亮点包括:

  • 集合框架扩展:提供了额外的集合类,如Multiset, Multimap, ImmutableList, ImmutableSet等。

  • 缓存:提供了LoadingCache,可以实现高性能的本地缓存。

  • 并发工具:如Service, ListenableFuture, ThreadPoolExecutor的扩展等。

  • 流操作:虽然在 Java 8 中引入了 Stream API,但在 Guava 中也有自己的流处理工具。

  • 事件总线:用于组件间事件传递的机制。

  • 限流:使用令牌桶算法实现请求限流。

二、Hutool

Hutool 是一个现代的 Java 工具库,它的目标是“让Java更加优雅”,提供了一系列工具方法,使得开发人员可以更快速地完成日常的开发工作。Hutool 的特点包括:

  • 工具方法丰富:几乎覆盖了所有常见的开发需求,如文件读写、网络请求、加密解密、日期处理、JSON转换等。

  • 轻量级:Hutool 可以按需导入,不需要的模块不会引入,减小项目体积。

  • 易于使用:API 设计友好,方法命名直观,易于理解和使用。

  • 兼容性:兼容 Java 6+,可以在各种环境中使用。

三、区别与联系

  • 功能:两者都提供了集合操作、缓存、并发工具等,但具体实现和API风格可能不同。

  • 设计:Guava 更倾向于提供底层的、高性能的工具,而 Hutool 则更侧重于上层的、便捷的工具方法。

  • 社区与支持:Guava 由于是 Google 维护,有强大的社区支持和文档,而 Hutool 作为一个国内开源项目,也有活跃的中文社区和详细的中文文档。

四、使用场景

  • Guava:适合大型项目,尤其是需要高性能、高并发处理的场景,如分布式系统、微服务架构中的缓存管理、限流控制等。

  • Hutool:适合快速开发,特别是对于中小型项目或者需要快速原型开发的场景,如Web应用、工具类项目、脚本编写等。

最终选择哪个库,取决于项目的具体需求、团队熟悉程度以及个人偏好。在实际开发中,也可以根据需要同时使用这两个库的不同部分。

五、Guava工具类

1.集合工具类

ImmutableList, ImmutableSet, ImmutableMap

  • 问题:在Java中创建不可变集合通常需要手动创建数组然后传递给集合构造器,这既繁琐又容易出错。

  • 解决方案:Guava的ImmutableList, ImmutableSet, ImmutableMap提供了一种简单的方法来创建不可变集合,确保集合一旦创建就不能被修改,这对于多线程环境特别有用。

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableMap;
​
// 创建不可变列表
ImmutableList<String> list = ImmutableList.of("one", "two", "three");
​
// 创建不可变集合
ImmutableSet<String> set = ImmutableSet.copyOf(Arrays.asList("a", "b", "c"));
​
// 创建不可变映射
ImmutableMap<String, Integer> map = ImmutableMap.of("key1", 1, "key2", 2);

2.字符串工具类

Strings

  • 问题:Java标准库中没有提供简洁的字符串处理方法,如判断字符串是否为空或只包含空白字符。

  • 解决方案:Guava的Strings类提供了诸如nullToEmpty, join, split等方法,可以方便地处理字符

import com.google.common.base.Strings;
​
// 将null转换成空字符串
String str = Strings.nullToEmpty(null); // 返回 ""
​
// 连接字符串数组
String joined = Strings.join(new String[]{"a", "b", "c"}, ","); // 返回 "a,b,c"

3.并发工具类

ListenableFuture

  • 问题:Java标准库中的Future接口在使用时不够灵活,且异常处理不便。

  • 解决方案:Guava的ListenableFuture提供了一个更强大的异步编程模型,可以添加回调函数处理结果异常

import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.SettableFuture;
​
// 创建一个ListenableFuture实例
SettableFuture<String> future = SettableFuture.create();
​
// 设置结果
future.set("Result!");
​
// 添加回调函数
future.addListener(() -> {try {System.out.println(future.get()); // 输出 "Result!"} catch (Exception e) {e.printStackTrace();}
}, MoreExecutors.directExecutor());

六、Hutool

1.字符串工具类

StrUtil

  • 问题:Java标准库中缺乏简洁的字符串处理方法,如判断字符串是否为空或只包含空白字符。

  • 解决方案:Hutool的StrUtil类提供了诸如isBlank, join, split等方法,可以方便地处理字符串。


import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
​
// 判断字符串是否为空或只包含空白字符
boolean blank = StrUtil.isBlank(null); // 返回 true
​
// 连接字符串数组java
String joined = StrUtil.join(",", new String[]{"a", "b", "c"}); // 返回 "a,b,c"
​
// 分割字符串
List<String> split = StrUtil.split("a,b,c", ',');

2.文件工具类

FileUtil

  • 问题:Java标准库中处理文件输入输出的代码往往冗长且容易出错。

  • 解决方案:Hutool的FileUtil类提供了简洁的方法来读写文件,如readUtf8String和writeUtf8String。

import cn.hutool.core.io.FileUtil;
​
// 读取文件内容
String content = FileUtil.readUtf8String("path/to/file.txt");
​
// 写入文件内容
FileUtil.writeUtf8String("Hello, World!", "path/to/file.txt");

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何安装dotenv,避坑指南,安装包的包名有误?
  • SpringBoot使用Redis(事务异步add + 更新)
  • 常见CSS属性
  • 学习小记-一些Redis小知识
  • 《警世贤文》摘抄:处人篇、受恩篇、宽人篇、听劝篇、劝善篇(多读书、多看报、少吃零食多睡觉)
  • 公司想无偿裁员,同事赖着不走
  • HTML+CSS+JS井字棋(来自动下棋)
  • 408数据结构-图的应用2-最短路径 自学知识点整理
  • RuntimeError: cuDNN error: CUDNN_STATUS_NOT_SUPPORTED.
  • 「Pytorch」roLabelImg 图像异常旋转 bug
  • 详解C#委托与事件
  • docker inspect 如何提取容器的ip和端口 网络信息?
  • 【JavaScript】聊一聊js中的浅拷贝与深拷贝与手写实现
  • 【vue教程】二. Vue特性原理详解
  • 漏洞挖掘 | EDU拿敏感信息的骚思路
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • mac修复ab及siege安装
  • passportjs 源码分析
  • pdf文件如何在线转换为jpg图片
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • spring-boot List转Page
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue组件定义
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 构建二叉树进行数值数组的去重及优化
  • 观察者模式实现非直接耦合
  • 如何利用MongoDB打造TOP榜小程序
  • 使用 Docker 部署 Spring Boot项目
  • 微信小程序填坑清单
  • 移动端唤起键盘时取消position:fixed定位
  • ​2020 年大前端技术趋势解读
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ###项目技术发展史
  • #WEB前端(HTML属性)
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (1)(1.11) SiK Radio v2(一)
  • (1)Nginx简介和安装教程
  • (1)svelte 教程:hello world
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (回溯) LeetCode 78. 子集
  • (计算机网络)物理层
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .Net IOC框架入门之一 Unity
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .sh
  • ::
  • @Autowired @Resource @Qualifier的区别
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [AIGC] Kong:一个强大的 API 网关和服务平台