Google Guava精讲(一)-Guava是什么?能做什么?

https://mvnrepository.com/artifact/com.google.guava/guava

作为Java栈的测试工程师,在写代码时候会频繁遇到字符串处理、缓存、反射等问题,我们最常规的做法就是,为了使原生的JDK方法好用,通常是做了一层又一层封装,然后提供整个测试团队使用,而渐渐的就形成了自己的Java工具箱。当然Guava的缘起也是如此。

Guava 是由Google开发的基于Java的开源库,包含许多Google核心库,它有助于最佳编码实践,并有助于减少编码错误。它为集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等提供实用程序方法。

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version>
</dependency>

https://mvnrepository.com/artifact/com.google.guava/guava

https://github.com/google/guava/wiki

扒Javadoc 学习Guava效率不高。因此,本文就出现了,尝试对 Guava 中一些最常用、最强大的功能进行通俗易懂的讲解和演示。
总体而言,Guava包含以下功能模块:

1. 基础工具包(Basic utilities) :帮助开发者提升Java编程效率。

1.1. 正确使用null和避免NPE

null 本身就是含糊不清的,它经常产生一些令人摸不着头脑的报错,耗费开发者的调试时间。而Guava 工具包中的实现程序都会明确拒绝null导致的程序报错,而不是盲目接受null。

1.2. 预处理

预处理工具包让测试更方便。

1.3. 常见的对象方法:

简化实现对象方法,例如hashCode() 和toString()。

1.4. 排序

Guava 提供强大的 "流畅比较器 "类

1.5. Trowables

简化异常和错误检查。

2. Collections

Guava对JDK collections原生方法进行了扩展,这些是Guava最核心和最受用户推崇的功能。

  • immutable collections(恒定集合),用于防御性编程、恒定集合和提高效率。
  • 新的集合类型,对JDK集合的补充:多集合、多映射、表格、双向映射等。
  • 强大的集合实用工具,用于java.util.Collections 中未提供的常用操作。
  • 更多扩展工具:例如编写集合装饰器,实现迭代器等,我们可以让这一切变得更简单实现。

3. Graphs

用于对图形结构数据(即实体和实体之间的关系)进行建模的库。主要功能包括:

  • Graph:其边界是匿名实体,没有自己的身份或信息。
  • 值图(ValueGraph):图的边具有相关的非唯一值。
  • 网络图:边缘为唯一对象的图形。
  • 支持可变和不可变、有向和无向的图形,以及其他一些属性。
  • 网络: 其边是唯一对象的图。
  • 支持可变和不可变,有向和无向以及其他几个属性的图。

4. Caches缓存

正确的使用本地缓存,支持多种缓存过期方式。

5. 函数式编程

使用Guava 的函数式编程,可以大大简化开发者代码。

6. 并发编程Concurrency

功能强大、简单抽象,可以帮助开发者更轻松地编写正确的并发代码。

  • ListenableFuture: 完成后回调。
  • Service:可启动和关闭的事物,为你处理困难的状态逻辑。

7. 字符串

提供一些非常有用的字符串处理方法: 拆分,拼接,替换等。

8. 原生类型支持

对原生类型 的操作,如int和char,还包括某些类型的无符号变量。

9. Ranges

Guava 功能强大的 API,用于处理连续和离散可比较类型的范围。

10. I/O

简化了I/O操作。

11. 哈希

提供比Object.hashCode() 的更复杂的哈希工具,包括Bloom过滤器。

12. EventBus

组件之间的发布-订阅式通信,而无需组件彼此显式注册。

13. 数学

提供经过优化(在JDK工具基础上)的数学实用工具。

14. 反射

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/82256.shtml

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

相关文章

RK3588修改eth0和eth1,对调这两个网卡设备的名称

1、以太网卡的名称一般是ethX&#xff08;X可以是0&#xff0c;1&#xff0c;2&#xff0c;3…&#xff09;&#xff0c;一般我们的设备只有一个网卡&#xff0c;并且一般也不会改变它的网卡名称&#xff0c;所以不需要关注此问题&#xff0c;但是有一些设备有两三个网卡&#…

new/delete, malloc/free 内存泄漏如何检测

区别&#xff1a; 首先new/delete是运算符&#xff0c;malloc/free是库函数。malloc/free只开辟内存不初始化&#xff1b;new/delete及开辟内存也初始化。抛出异常的方式&#xff1a;new/delete开辟失败使用抛出bad_alloc&#xff1b;malloc/free通过返回值判断。malloc和new区…

el-table 翻页记住上页选项,包含回显选中的数据

需求为翻页记住上页选项,包含回显选中的数据,然后还能进行新增和取消勾选 首先element管网有提供及住翻页功能 所以可以根据官网提供的方法来改造 一定要做的操作就是清空一下选中的数据,否则不生效,this.$refs.selectTable.clearSelection(); 然后就是处理选中的数据,和原…

强强/视频SDK:VisioForge SDKs .Net 15.6.8 Crack

VisioForge 为软件开发人员提供视频捕获、编辑和播放解决方案 使用我们的开发人员软件&#xff0c;您可以开发用于从多种来源&#xff08;例如网络摄像头、IP 摄像机、摄像机或 PC 屏幕&#xff09;捕获视频的应用程序。视频可以保存为所有最流行格式的视频文件&#xff0c;例如…

前端笔面编程收录【按公司】

目录 虚拟DOM【腾讯音乐笔试】 连字转驼峰【美团一面】 1.split(-) 2.toUpperCase() 3.slice(1) 用友sp 一面【二选一】 数组相邻和最大的对应两个元素 千位分割【无负数&#xff0c;含小数】 二面 华容道&#xff1a;BFS k / 3, y k % 3; //一维数组下标转化到二…

金蝶云星空与旺店通·企业奇门对接集成盘盈单查询打通创建盘点单

金蝶云星空与旺店通企业奇门对接集成盘盈单查询打通创建盘点单 来源系统:金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平台。K/3C…

71.函数模板

函数模板是C中一种通用编程技术&#xff0c;允许编写可以适用于多种数据类型的函数&#xff0c;而无需为每种数据类型编写不同的函数。函数模板通过参数化类型来实现通用性&#xff0c;可以在不同情况下自动生成具体的函数代码。 目录 1.函数模板的定义 2.函数模板的使用 …

组合拳SSRF+redis未授权访问

目录 一、SSRF 二、redis未授权访问 三、组合利用 1.写入Webshell 2.反弹shell 一、SSRF 一台web服务器对其他服务器发起请求&#xff0c;以加载其他服务器的web内容或数据 但因请求参数没有进行严格过滤&#xff0c;攻击者可能会通过SSRF漏洞来访问敏感数据、执行未经授…

springcloud3 分布式事务-产生原因的模拟1

一 分布式事务 1.1 分布式事务产生条件 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构下&#xff0c;产生的事务&#xff0c;例如&#xff1a; 1.跨数据源的分布式事务 2.跨服务的分布式事务 3.综合情况 二 案例操作 2.1 原理架构 订单的创建、库存的扣…

Spring常见面试题总结

什么是Spring Spring是一个轻量级Java开发框架&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题&#xff0c;以提高开发效率。它是一个分层的JavaSE/JavaEE full-stack&#xff08;一站式&#xff09;轻量级开源框架&#xff0c;为开发Java应用程序…

vue+express、gitee pm2部署轻量服务器

一、代码配置 前后端接口都保持 127.0.0.1:3000 vue创建文件 pm2.config.cjs module.exports {apps: [{name: xin-web, // 应用程序的名称script: npm, // 启动脚本args: run dev, // 启动脚本的参数cwd: /home/vue/xin_web, // Vite 项目的根目录interpreter: none, // 告诉…

RabbitMQ - 如保证消息的可靠性?

目录 一、消息可靠性 1.1、生产者消息确认&#xff08;生产者角度&#xff09; 1.1.1、理论 1.1.2、实践 1.2、消息持久化&#xff08;消息角度&#xff09; 1.2.1、理论 1.3、消费者消息确认&#xff08;消费者角度&#xff09; 1.3.1、理论 1.3.2、实践 1.4、失败重…

关于vue.config.js

关于vue.config.js 简述 vue.config.js是一个可选的配置文件&#xff0c;如果项目的根目录中存在这个文件&#xff0c;那么它就会被vue/cli-service自动加载。你也可以使用package.json中的vue字段&#xff0c;但是注意这种写法需要你严格遵守JSON的格式来写。 这个文件应该…

Matlab图像处理-Lab模型

Lab模型 Lab模型是由CIE&#xff08;国际照明委员会&#xff09;制定的一种彩色模型。该模型与设备无关&#xff0c;弥补了RGB模型和CMYK模型必须依赖于设备颜色特性的不足&#xff1b; 另外&#xff0c;自然界中的任何颜色都可以在Lab空间中表现出来&#xff0c;也就是说RGB和…

20230917后台面经总结

1.ping底层原理 Ping 是 ICMP 的一个重要应用&#xff0c;主要用来测试两台主机之间的连通性。Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文&#xff0c;目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。 基…

Unity之手游UI的点击和方向移动

一 Button的点击 1.1 新建UI -> Button 1.2 在Button上面右击添加空物体 1.3 创建脚本挂载到空物体上面 脚本内容添加点击方法&#xff0c;来控制物体的显示隐藏 using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using Unit…

Nginx 文件解析漏洞复现

一、漏洞说明 Nginx文件解析漏洞算是一个比较经典的漏洞&#xff0c;接下来我们就通过如下步骤进行漏洞复现&#xff0c;以及进行漏洞的修复。 版本条件&#xff1a;IIS 7.0/IIS 7.5/ Nginx <8.03 二、搭建环境 cd /vulhub/nginx/nginx_parsing_vulnerability docker-compos…

【C++基于多设计模式下的同步异步日志系统】

文章目录 [toc] 1 :peach:项目介绍:peach:2 :peach:开发环境:peach:3 :peach:核心技术:peach:4 :peach:环境搭建:peach:5 :peach:日志系统介绍:peach:5.1 :apple:为什么需要日志系统&#xff1f;:apple:5.2 :apple:日志系统技术实现:apple:5.2.1 :lemon:同步写日志:lemon:5.2.2…

【excel密码】excel文件加密的三种方式

想要给Excel文件进行加密&#xff0c;方法有很多&#xff0c;今天分享三种Excel加密方法给大家。 一、打开密码 设置了打开密码的excel文件&#xff0c;打开文件就会提示输入密码才能打开excel文件&#xff0c;只有输入了正确的密码才能打开并且编辑文件&#xff0c;如果密码…

Unity实现简易太阳系

开发环境&#xff1a;Unity 2022.3.5f1c1 Visual Studio 2022 太阳系相关星体&#xff1a;太阳、八大行星、月球 模拟星系&#xff1a;太阳系、地月系 功能&#xff1a;支持行星以太阳为中心&#xff0c;任意轴进行公转&#xff0c;此处演示同一平面。 a1-a8为公转轴&#xff…