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渲染三者构成了虚拟世界的基石。它们如同乐高积木的零件,通过精确的协作,最终在屏幕上呈现出复杂的视觉场景。本文将从技术原理、协作机制到性…...
Taotoken 模型广场如何帮助开发者快速选型与切换 ChatGPT
Taotoken 模型广场如何帮助开发者快速选型与切换 ChatGPT 1. 模型发现与筛选功能 Taotoken 模型广场为开发者提供了集中展示多家厂商大模型的平台界面。进入模型广场后,用户可通过左侧筛选栏按模型类型(如文本生成、多模态)、厂商、价格区间…...
八大网盘直链下载终极指南:如何一键获取真实下载链接
八大网盘直链下载终极指南:如何一键获取真实下载链接 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...
STL-Volume-Model-Calculator:3D打印模型体积计算的智能助手
STL-Volume-Model-Calculator:3D打印模型体积计算的智能助手 【免费下载链接】STL-Volume-Model-Calculator STL Volume Model Calculator Python 项目地址: https://gitcode.com/gh_mirrors/st/STL-Volume-Model-Calculator 你是否在3D打印前为材料用量估算…...
AICoverGen终极指南:如何用AI轻松制作专业级歌曲翻唱
AICoverGen终极指南:如何用AI轻松制作专业级歌曲翻唱 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen AI音乐创…...
告别同步折腾!坚果云 × Obsidian 官方同步插件,最强工作流全解析
坚果云 Obsidian 官方同步插件 Nutstore Sync 上架 Obsidian 社区插件市场已经有几个月啦! 自从这款同步插件问世后,后台的小伙伴们直呼“终于等到了!”、“这下不用折腾了!”。经过这几个月的重度使用和时间检验,它…...
工业机器人预测性维护新利器:映翰通IG900边缘网关应用实践
# 工业机器人预测性维护新利器:映翰通IG900边缘网关应用实践## 背景 工业机器人已广泛应用于焊接、分拣、锻造、喷涂、机床加工、码垛搬运等行业,是产线上的核心力量。机械臂运动速度极快,一旦发生故障,不仅影响节拍,更…...
微信聊天记录永久保存指南:用WeChatMsg打造你的数字记忆博物馆
微信聊天记录永久保存指南:用WeChatMsg打造你的数字记忆博物馆 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...
合宙 LuatOS 开发避坑指南:智能售货机 APP 从调试到上架
本文将以智能售货机APP开发为例,详细拆解基于合宙Air8101引擎主机的完整开发流程,全程实操落地,帮助新手快速上手并实现专属嵌入式APP。 一、准备硬件环境 WIN10 以及 WIN10 以上的 Windows 操作系统电脑一台合宙引擎主机8101一块 type-c 接…...
Python基础:列表的定义、增删改查核心操作
Python基础:列表的定义、增删改查核心操作📚 本章学习目标:深入理解列表的定义、增删改查核心操作的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《Python从入门到精通教程》Python入门…...
Pearcleaner:开源免费的macOS应用清理工具,为你的Mac带来全新体验
Pearcleaner:开源免费的macOS应用清理工具,为你的Mac带来全新体验 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾经发现&am…...
