CommonLang3-使用介绍
摘自:https://www.cnblogs.com/haicheng92/p/18721636
学习要带着目的,参照现实问题
本次目标:
- 了解 CommonsLang3 API 文档,找对路后以后开发直接查询 API 文档,摈弃盲目的百度
- 掌握基础的字符串、日期、数值等工具方法,初步替代手搓的工具类
为什么要用 CommonsLang3?
- 比自己手写的工具方法安全性高,不易出 Bug
- 第三方工具包,便于携带,开箱即用,一通百通,再也不用收集各种工具方法了
介绍
Common3Lang3官网
The standard Java libraries fail to provide enough methods for manipulation of its core classes. Apache Commons Lang provides these extra methods.
Apache Commons Lang provides a host of helper utilities for the java.lang API, notably String manipulation methods, basic numerical methods, object reflection, concurrency, creation and serialization and System properties. Additionally it contains basic enhancements to java.util.Date and a series of utilities dedicated to help with building methods, such as hashCode, toString and equals.
意:Java 标准库没有提供足够的方法去操作核心类,于是 Apache Commons Lang 就补充了这些方法。
Apache Commons Lang 为 java.lang 中的核心类提供了一系列辅助工具 API,尤其是字符串操作方法,基础数字方法,对象反射,并发,创建和序列化以及系统属性。另外它还包括对 java.util.Date 的基础增强,还有一系列实用工具用来辅助 building 方法,比如 hashCode,toString 和 equals。
CommonsLang3 和 CommonsLang 的区别:Lang3 可以看做是 Lang 的高阶版本,二者同源不同库,使用上并不兼容。建议使用 Lang3 库
CommonsLang3 API 文档
都是有些简单的英文,再加上翻译软件,有点耐心都能看懂。
字符串
文档中写的非常非常非常清楚,一定要看文档,看源码也行!!
日期实践
String[] datePatterns = new String[] {"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd"}; | |
String dateStr = "2025-02-18 11:06:20"; | |
Date date = DateUtils.parseDate(dateStr, Locale.CHINESE, datePatterns); | |
log.info("字符串转为日期:{}", date); | |
String str = DateFormatUtils.format(date, datePatterns[0]); | |
log.info("日期转为字符串:{}", str); |
对象工具类
在实际开发中,有大量嵌套属性的判空操作,比如以下:
Employee employee = this.getEmployee(); | |
// 如果员工不空,且员工所属部门也不空,则 do something | |
if (employee != null && employee.getDepartment() != null) { | |
log.info("!=null:all not null"); | |
} | |
// 使用 Objects | |
if (Objects.nonNull(employee) && Objects.nonNull(employee.getDepartment())) { | |
log.info("Objects.nonNull:all not null"); | |
} | |
// 使用 CommangsLang3 ObjectUitis,等同于以上两种写法,但是更加简洁明了 | |
if (ObjectUtils.allNotNull(employee, employee.getDepartment())) { | |
log.info("ObjectUtils.allNotNull:all not null"); | |
} |
还有大量设置默认值的操作,比如【如果为空,则设置默认值】
Employee emp = new Employee("张三"); | |
//emp.setDepartment(new Department("测试")); | |
// 条件判断:如果员工对象部门为空,则默认创建一个部门 | |
Department depart0 = emp.getDepartment(); | |
if (Objects.isNull(depart0)) { | |
depart0 = new Department("开发0"); | |
} | |
log.info("部门: {}", depart0.getName()); | |
// Optional 新写法1 | |
Department depart1 = Optional.ofNullable(emp.getDepartment()).orElse(new Department("开发1")); | |
log.info("部门: {}", depart1.getName()); | |
// Optional 新写法2 | |
Department depart2 = Optional.ofNullable(emp.getDepartment()).orElseGet(() -> new Department("开发2")); | |
log.info("部门: {}", depart2.getName()); | |
// Lang3 defaultIfNull 等同于 Optional 新写法1 | |
Department depart3 = ObjectUtils.defaultIfNull(emp.getDepartment(), new Department("开发3")); | |
log.info("部门: {}", depart3.getName()); | |
// Lang3 getIfNull 等同于 Optional 新写法2 | |
Department depart4 = ObjectUtils.getIfNull(emp.getDepartment(), () -> new Department("开发4")); | |
log.info("部门: {}", depart4.getName()); |
- orElse 无论 Optional 的值是否为 null,都会计算 default 的值。
- orElseGet 只有当 Optional 的值为 null 时,才会去计算函数表达式的值,类似于懒加载,功能上相当于短路。
所以建议使用 Optional.orElseGet() 或 ObjectUtils.getIfNull() 方法。
StringUtils 中也有 defulatIfEmpty 这种带有简单逻辑判断的方法,这或许也是一种规律,将简单判断/逻辑封装为方法
分类: Java
相关文章:
CommonLang3-使用介绍
摘自:https://www.cnblogs.com/haicheng92/p/18721636 学习要带着目的,参照现实问题 本次目标: 了解 CommonsLang3 API 文档,找对路后以后开发直接查询 API 文档,摈弃盲目的百度掌握基础的字符串、日期、数值等工具…...
Java常用设计模式及其应用场景
1. 什么是设计模式? 设计模式是一个经过多次验证的、针对常见问题的可复用解决方案。设计模式并不是具体的代码实现,而是给出了如何解决问题的思路和结构。在实际开发过程中,设计模式有助于开发者快速找到合适的解决方案,从而减少…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_pnalloc函数
ngx_pnalloc 声明在 src\core\ngx_palloc.h void *ngx_pnalloc(ngx_pool_t *pool, size_t size); 定义在 src\core\ngx_palloc.c void * ngx_pnalloc(ngx_pool_t *pool, size_t size) { #if !(NGX_DEBUG_PALLOC)if (size < pool->max) {return ngx_palloc_small(pool, …...
【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析①】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase01 作者:车端域控测试工程师 更新日期:2025年02月14日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-001测试用例 用例ID测试场景验证要点参考条款预期…...
A与B组件自动对齐与组装,无映射直接补偿。
网上针对组装的从视觉到控制动作,要不就是收费,要不就是简单介绍。这么详细的比较难找~ 手下留情,不喜勿喷! Show time~ 分步解决方案: 标定阶段(Calibration) 9点张氏标定(每个位置A1、A2、B1、B2): 使用机械手在相机视野内沿Z字形路径移动,覆盖9个点(XY方…...
QT 读写锁
一、概述 1、读写锁是一种线程同步机制,用于解决多线程环境下的读写竞争问题。 2、读写锁允许多个线程同时获取读锁(共享访问),但只允许一个线程获取写锁(独占访问)。 3、这种机制可以提高并发性能&…...
C++ 的时间库之二:Ratio
从现在开始,我们开始介绍 C 风格的时间处理,在这之前,首先要介绍std::ratio。因为 C 的 chrono库中的时间段(duration)定义离不开std::ratio,不了解std::ratio,就很难理解duration的定义。 1 st…...
使用小雅xiaoya/Emby正确的观看电影电视剧的姿势
最近有很多小伙伴来咨询关于小雅Emby全家桶的使用问题,最常见的就是在Emby上搜索出来资源之后,点击播放会提示【播放错误】,当前没有兼容的流。 这可把很多小伙伴给急坏了……于是找到小白咨询。 嗯……怎么说呢?小白并不喜欢看电…...
Java状态机
目录 1. 概念 2. 定义状态机 3. 生成一个状态机 4. 使用 1. 概念 在Java的应用开发里面,应该会有不少的人接触到一个业务场景下,一个数据的状态会发生多种变化,最经典的例子例如订单,当然还有像用户的状态变化(冻结…...
【Pandas】pandas Series isin
Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐,使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值Series.drop([lab…...
通过VSCode直接连接使用 GPT的编程助手
GPT的编程助手在VSC上可以直接使用 选择相应的版本都可以正常使用。每个月可以使用40条,超过限制要付费。 如下图对应的4o和claude3.5等模型都可以使用。VSC直接连接即可。 配置步骤如下: 安装VSCODE 直接,官网下载就行 https://code.vis…...
一种最常见的js加密解密
前言 在前端开发的广袤天地中,你是否遭遇过一些看似“乱码”般的代码,根本无从下手理解?这其实很可能是被 _0x处理过的代码。_0x就像一位神秘的“化妆师”,能把原本清晰的代码改头换面。今天,我就来分享如何破解这些被…...
【Python爬虫(4)】揭开Python爬虫的神秘面纱:基础概念全解析
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
SMOJ 一笔画/洛谷 P7171 COCI 2020/2021 #3 Selotejp 题解
1.一笔画 题意 给出 n 行 m 列的点阵,每个点是一个字符: “.” 或 “#” ,其中“#”表示该点是障碍物。 现在小毛的问题是: 他最少要画多少笔才能把点阵里所有的“.”都覆盖完毕(被小毛画到的点就会被覆盖ÿ…...
【Java学习】继承
一、继承 子类继承父类,子类这个类变量的引用在原有的指向子类自己类变量空间的原有访问权限上,增加上了父类类变量空间的访问权限,此时子类类变量指向的空间变为了原来子类类变量空间加上父类类变量空间,此时子类类变量空间就变成…...
计时器任务实现(保存视频和图像)
下面是一个简单的计时器任务实现,可持续地每秒保存一幅图像,也可持续地每60秒保存一个视频,图像和视频均以当前时间命名: TimerTask类的实现如下: class TimerTask { public:TimerTask(const std::string& path):…...
树莓百度百科能否揭开成都树莓集团的神秘面纱?
树莓百度百科作为大众获取信息的重要渠道,在一定程度上为人们了解树莓集团提供了窗口,但要完全揭开其神秘面纱,仍存在一定局限性。 从树莓百度百科上,我们能获取到关于树莓集团的基本信息,如公司的成立时间、法定代表人…...
【如何看懂数据手册和原理图】
【如何看懂数据手册和原理图】 文章目录 【如何看懂数据手册和原理图】1.数据手册1.1去哪里看?1.2需要注意的 2.支路3.回路4.网孔5.电路定理:基尔霍夫定律**集总参数电路** 抽象理想化5.1基尔霍夫电流定律 (KCL)5.2基尔霍夫电压定律 (KVL)5.3总结 6.读懂…...
SQL 优化工具使用之 explain 详解
一、导读 对于大部分开发人员来说,平常接触的无非就是增删改查这些基本操作,创建存储过程,视图等等都是 DBA 该干的活,但是想要把这些基本操作写的近乎完美也是一件难事。 而 explain 显示了 MySQL 如何使用索引来处理 select 语…...
深度解析Unity3D渲染管线:网格、材质与GPU渲染的协同逻辑
在3D实时渲染领域,网格(Mesh)、材质(Material)和GPU渲染三者构成了虚拟世界的基石。它们如同乐高积木的零件,通过精确的协作,最终在屏幕上呈现出复杂的视觉场景。本文将从技术原理、协作机制到性…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
StarRocks 全面向量化执行引擎深度解析
StarRocks 全面向量化执行引擎深度解析 StarRocks 的向量化执行引擎是其高性能的核心设计,相比传统行式处理引擎(如MySQL),性能可提升 5-10倍。以下是分层拆解: 1. 向量化 vs 传统行式处理 维度行式处理向量化处理数…...
算法刷题-回溯
今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...
运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.
报错 找到package.json文件 找到这个修改成 "lint": "eslint --fix --ext .js,.vue src" 为elsint有配置结尾换行符,最后运行:npm run lint --fix...
