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

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 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月14日 关键词&#xff1a;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、读写锁是一种线程同步机制&#xff0c;用于解决多线程环境下的读写竞争问题。 2、读写锁允许多个线程同时获取读锁&#xff08;共享访问&#xff09;&#xff0c;但只允许一个线程获取写锁&#xff08;独占访问&#xff09;。 3、这种机制可以提高并发性能&…...

C++ 的时间库之二:Ratio

从现在开始&#xff0c;我们开始介绍 C 风格的时间处理&#xff0c;在这之前&#xff0c;首先要介绍std::ratio。因为 C 的 chrono库中的时间段&#xff08;duration&#xff09;定义离不开std::ratio&#xff0c;不了解std::ratio&#xff0c;就很难理解duration的定义。 1 st…...

使用小雅xiaoya/Emby正确的观看电影电视剧的姿势

最近有很多小伙伴来咨询关于小雅Emby全家桶的使用问题&#xff0c;最常见的就是在Emby上搜索出来资源之后&#xff0c;点击播放会提示【播放错误】&#xff0c;当前没有兼容的流。 这可把很多小伙伴给急坏了……于是找到小白咨询。 嗯……怎么说呢&#xff1f;小白并不喜欢看电…...

Java状态机

目录 1. 概念 2. 定义状态机 3. 生成一个状态机 4. 使用 1. 概念 在Java的应用开发里面&#xff0c;应该会有不少的人接触到一个业务场景下&#xff0c;一个数据的状态会发生多种变化&#xff0c;最经典的例子例如订单&#xff0c;当然还有像用户的状态变化&#xff08;冻结…...

【Pandas】pandas Series isin

Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐&#xff0c;使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值Series.drop([lab…...

通过VSCode直接连接使用 GPT的编程助手

GPT的编程助手在VSC上可以直接使用 选择相应的版本都可以正常使用。每个月可以使用40条&#xff0c;超过限制要付费。 如下图对应的4o和claude3.5等模型都可以使用。VSC直接连接即可。 配置步骤如下&#xff1a; 安装VSCODE 直接&#xff0c;官网下载就行 https://code.vis…...

一种最常见的js加密解密

前言 在前端开发的广袤天地中&#xff0c;你是否遭遇过一些看似“乱码”般的代码&#xff0c;根本无从下手理解&#xff1f;这其实很可能是被 _0x处理过的代码。_0x就像一位神秘的“化妆师”&#xff0c;能把原本清晰的代码改头换面。今天&#xff0c;我就来分享如何破解这些被…...

【Python爬虫(4)】揭开Python爬虫的神秘面纱:基础概念全解析

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

SMOJ 一笔画/洛谷 P7171 COCI 2020/2021 #3 Selotejp 题解

1.一笔画 题意 给出 n 行 m 列的点阵&#xff0c;每个点是一个字符&#xff1a; “.” 或 “#” &#xff0c;其中“#”表示该点是障碍物。 现在小毛的问题是&#xff1a; 他最少要画多少笔才能把点阵里所有的“.”都覆盖完毕&#xff08;被小毛画到的点就会被覆盖&#xff…...

【Java学习】继承

一、继承 子类继承父类&#xff0c;子类这个类变量的引用在原有的指向子类自己类变量空间的原有访问权限上&#xff0c;增加上了父类类变量空间的访问权限&#xff0c;此时子类类变量指向的空间变为了原来子类类变量空间加上父类类变量空间&#xff0c;此时子类类变量空间就变成…...

计时器任务实现(保存视频和图像)

下面是一个简单的计时器任务实现&#xff0c;可持续地每秒保存一幅图像&#xff0c;也可持续地每60秒保存一个视频&#xff0c;图像和视频均以当前时间命名&#xff1a; TimerTask类的实现如下&#xff1a; class TimerTask { public:TimerTask(const std::string& path):…...

树莓百度百科能否揭开成都树莓集团的神秘面纱?

树莓百度百科作为大众获取信息的重要渠道&#xff0c;在一定程度上为人们了解树莓集团提供了窗口&#xff0c;但要完全揭开其神秘面纱&#xff0c;仍存在一定局限性。 从树莓百度百科上&#xff0c;我们能获取到关于树莓集团的基本信息&#xff0c;如公司的成立时间、法定代表人…...

【如何看懂数据手册和原理图】

【如何看懂数据手册和原理图】 文章目录 【如何看懂数据手册和原理图】1.数据手册1.1去哪里看&#xff1f;1.2需要注意的 2.支路3.回路4.网孔5.电路定理&#xff1a;基尔霍夫定律**集总参数电路** 抽象理想化5.1基尔霍夫电流定律 (KCL)5.2基尔霍夫电压定律 (KVL)5.3总结 6.读懂…...

SQL 优化工具使用之 explain 详解

一、导读 对于大部分开发人员来说&#xff0c;平常接触的无非就是增删改查这些基本操作&#xff0c;创建存储过程&#xff0c;视图等等都是 DBA 该干的活&#xff0c;但是想要把这些基本操作写的近乎完美也是一件难事。 而 explain 显示了 MySQL 如何使用索引来处理 select 语…...

深度解析Unity3D渲染管线:网格、材质与GPU渲染的协同逻辑

在3D实时渲染领域&#xff0c;网格&#xff08;Mesh&#xff09;、材质&#xff08;Material&#xff09;和GPU渲染三者构成了虚拟世界的基石。它们如同乐高积木的零件&#xff0c;通过精确的协作&#xff0c;最终在屏幕上呈现出复杂的视觉场景。本文将从技术原理、协作机制到性…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...