CommonLang3-使用介绍
学习要带着目的,参照现实问题
本次目标:
- 了解 CommonsLang3 API 文档,找对路后以后开发直接查询 API 文档,摈弃盲目的百度
- 掌握基础的字符串、日期、数值等工具方法,初步替代手搓的工具类
为什么要用 CommonsLang3?
- 比自己手写的工具方法安全性高,不易出 Bug
- 第三方工具包,便于携带,开箱即用,一通百通,再也不用收集各种工具方法了
介绍
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 库
都是有些简单的英文,再加上翻译软件,有点耐心都能看懂。
字符串
文档中写的非常非常非常清楚,一定要看文档,看源码也行!!
日期实践
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 这种带有简单逻辑判断的方法,这或许也是一种规律,将简单判断/逻辑封装为方法
CommonLang3-使用介绍的更多相关文章
- CSS3 background-image背景图片相关介绍
这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- Windows Server 2012 NIC Teaming介绍及注意事项
Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- HTML DOM 介绍
本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...
- HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...
- HTML5 介绍
本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...
- ExtJS 4.2 介绍
本篇介绍ExtJS相关知识,是以ExtJS4.2.1版本为基础进行说明,包括:ExtJS的特点.MVC模式.4.2.1GPL版本资源的下载和说明以及4种主题的演示. 目录 1. 介绍 1.1 说明 1 ...
- ExtJS 4.2 组件介绍
目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...
随机推荐
- spring gateway 学习
为什么需要使用网关 1.实现统一认证 2.统一一个域名,解决调用困难. 3.协议转换 将不友好的协议转成友好的协议. spring cloud gateway 是什么 是spring cloud 的第 ...
- HarmonyOS Next 入门实战 - 导航框架:页面路由、组件导航(Navigation)
页面路由 官方不推荐使用页面路由,这里仅做简单介绍. 页面路由用于标识 @Entry 注解的页面间的跳转. 包引入 import { router } from'@kit.ArkUI'; 页面跳转 r ...
- Vue.js 数据绑定
1.标签内容绑定 双括号语法:使用 {{}} 将变量包裹起来,vue会将变量的值解析为普通文本,而非 HTML 代码 <div>{{msg}}</div> <div> ...
- 案例 | 销讯通加持药企SFE部门效能提升
为了获取更大的市场空间,医药健康行业正迎来一波前所未有的产业升级.尽管不少企业取得了许多成绩,但仍面临诸多挑战. 江苏某制药公司在心脑血管.中枢神经.胃肠内科.心脏科.内分泌科.皮肤科和风湿科等领域均 ...
- 【Amadeus原创】SQL Server数据库备份、差异备份、日志备份脚本
1,sp脚本 USE [master] GO /****** Object: StoredProcedure [dbo].[sp_BackupDatabase] Script Date: 2021/1 ...
- Visual Studio C++ 汇编 混合编程
Visual Studio C++ 汇编 混合编程 实验要求 请用汇编语言编写实现GCD递推公式的子程序,对入口和出口参数形式不做要求,但需要用 C 语言函数来获取输入.调用汇编递推子程序,并且用 C ...
- 【单片机】I/O口实验
要求:拨动开关,让所亮小灯位置左移或者右移 #include <STC8.H> #include <intrins.h> void delay(){ int i,j; for( ...
- Qt编写的项目作品11-带频谱的音乐播放器
一.功能特点 可获取整个声音文件采样值数据 可实时获取当前播放位置的采样值数据 可设置采样的步长和数量 可开始播放/暂停播放/停止播放 多线程处理,超流畅 可设置当前播放位置 可设置和调节音量 支持任 ...
- Qt编写地图综合应用18-地图模式
一.前言 除了传统的街道图地图外,默认的一般都是街道图,还有卫星图.三维图等,其中又有叠加层,比如叠加路况图层和路网图层等,最近去了多家的地图官网看对应的api接口,总体上感觉现在都往2.5D或者3D ...
- Qt通用方法及类库12
函数名 //初始化表格 static void initTableView(QTableView *tableView, int rowHeight = 25, bool headVisible = ...