探索实用的Java工具类
1.排序
有时需要对集合进行排序。此时可以使用Collections的sort方法。
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
Collections.sort(list); // ASC
System.out.println("ASC-排序后:"+list);
Collections.reverse(list); // DESC
System.out.println("DESC-排序后:"+list);
Collections.shuffle(list); // 随机排序
System.out.println("随机排序后:"+list);
2.获取最大值或最小值
有时需要在集合中找到最大值或最小值。此时可以使用Collections的max和min方法。
注意:如果集合为空,则会抛出NoSuchElementException异常
List<Integer> list1 = new ArrayList<>();
list1.add(2);
list1.add(1);
list1.add(3);
Integer max = Collections.max(list1);
Integer min = Collections.min(list1);
System.out.println("最大值:"+max);
System.out.println("最小值:"+min);
3.返回空集合
有时在检查空值后,我们需要返回一个空集合。可以使用emptyList方法
注意:返回的空集合是不可修改的,不能添加元素,否则会抛出UnsupportedOperationException异常
建议:使用Collections.emptyList()方法获取空集合
List<Object> emptyList = Collections.emptyList();
System.out.println("空集合:"+emptyList);
4.转换为不可修改集合
有时需要将一个可修改的集合转换为不可修改的集合。可以使用unmodifiableList方法
注意:返回的不可修改集合是只读的,不能修改集合元素,否则会抛出UnsupportedOperationException异常
建议:使用Collections.unmodifiableList方法获取不可修改集合
List<Integer> list2 = new ArrayList<>();
list2.add(2);
list2.add(1);
list2.add(3);
List<Integer> unmodifiableList = Collections.unmodifiableList(list2);
// 不能添加元素,否则会抛出UnsupportedOperationException异常
//unmodifiableList.add(4);
System.out.println("不可修改集合:"+unmodifiableList);
5. 转换为线程安全集合
有时需要将一个不可修改的集合转换为线程安全的集合。可以使用synchronizedList方法
注意:返回的线程安全集合是线程安全的,可以在多线程环境下使用,但是效率会降低
建议:使用Collections.synchronizedList方法获取线程安全集合
其底层实现会创建SynchronizedRandomAccessList或SynchronizedList类。
这两个类的许多方法会使用synchronized进行锁定。
List<Integer> list3 = new ArrayList<>();
list3.add(2);
list3.add(1);
list3.add(3);
// 将ArrayList转换为线程安全集合
List<Integer> integers = Collections.synchronizedList(list3);
System.out.println(integers);
6.检查集合是否为空
对于集合操作,除了前面提到的Collections
工具类,CollectionUtils
工具类也非常常用。
目前,比较主流的有apache
中的org.apache.commons.collections
包下的CollectionUtils
工具类。
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
有时需要检查集合是否为空。可以使用isEmpty方法
注意:如果集合为空,则返回true,否则返回false
建议:使用CollectionUtils.isEmpty方法检查集合是否为空
其底层实现会调用isEmpty方法。
List<Integer> list4 = new ArrayList<>();
list4.add(2);
list4.add(1);
list4.add(3);
if (CollectionUtils.isEmpty(list)) {
System.out.println("集合为空。");
} else {
System.out.println("集合不为空。");
}
7.对两个集合进行操作
有时需要对两个集合进行操作。此时可以使用Collections的相关方法。
注意:Collections提供了很多方法,可以对集合进行操作。
建议:使用Collections的相关方法。
List<Integer> list01 = new ArrayList<>();
list01.add(2);
list01.add(1);
list01.add(3); List<Integer> list02 = new ArrayList<>();
list02.add(2);
list02.add(4); // 获取并集
Collection unionList = CollectionUtils.union(list01, list02);
System.out.println("并集:"+unionList); // 获取交集
Collection intersectionList = CollectionUtils.intersection(list01, list02);
System.out.println("交集:"+intersectionList); // 获取对称差
Collection disjunctionList = CollectionUtils.disjunction(list01, list02);
System.out.println("对称差:"+disjunctionList); // 获取差集
Collection subtractList = CollectionUtils.subtract(list01, list02);
System.out.println("差集:"+subtractList);
8. 快速初始化集合
需要引入了com.google.guava
的依赖,你会获得许多有用的小工具。这里推荐一个位于com.google.common.collect
包下的集合工具:Lists
。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.2-jre</version>
</dependency>
有时需要快速初始化集合。此时可以使用Arrays.asList方法。
注意:返回的集合是Arrays内部类,不能修改集合元素,否则会抛出UnsupportedOperationException异常
建议:使用Lists.newArrayList方法获取集合。
List<Integer> list5 = Lists.newArrayList(1, 2, 3);
System.out.println("快速初始化集合:"+list5);
9.笛卡尔积
有时需要计算两个集合的笛卡尔积。此时可以使用cartesianProduct方法。
注意:返回的笛卡尔积是一个List<List<T>>,其中每个元素是一个List<T>。
建议:使用cartesianProduct方法计算笛卡尔积。
List<Integer> list6 = Lists.newArrayList(1, 2);
List<Integer> list7 = Lists.newArrayList(3, 4);
List<List<Integer>> cartesianProductList = Lists.cartesianProduct(list6, list7);
System.out.println("笛卡尔积:"+cartesianProductList);
10. 集合分解
有时需要将一个集合分解为多个集合。此时可以使用partition方法。
注意:返回的分解是一个List<List<T>>,其中每个元素是一个List<T>。
建议:使用partition方法分解集合。
List<Integer> list8 = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<List<Integer>> partitionList = Lists.partition(list8, 3);
System.out.println("分解:"+partitionList);
11. 流处理
将某个集合转换为另一个接口,可以使用Lists的transform方法
注意:返回的转换后的集合是另一个接口。
建议:使用Lists.transform方法转换集合。
List<String> list9 = Lists.newArrayList("a","b","c");
// 将字符串集合转换为大写字符串集合
List<String> transformList = Lists.transform(list9, String::toUpperCase);
System.out.println(transformList);
12.反转顺序
有时需要反转集合的顺序。此时可以使用reverse方法。
注意:返回的反转后的集合是原集合的引用。
建议:使用reverse方法反转集合。
List<Integer> list10 = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Collections.reverse(list10);
System.out.println("反转:"+list10);
13. Objects工具类
有时需要判断对象是否为空。此时可以使用Objects工具类。
注意:Objects工具类提供了很多方法,可以判断对象是否为空、是否相等、是否相同等。
建议:使用Objects工具类。
//判断对象是否为空
Integer num = new Integer(10);
if (Objects.isNull(num)) {
System.out.println("对象为空。");
} else {
System.out.println("对象不为空。");
}
14. 当对象为null时抛出异常
如果我们想在对象为null时抛出空指针异常,可以使用Objects的requireNonNull方法
注意:如果对象为null,则会抛出NullPointerException异常。
建议:使用Objects工具类。
Integer i = new Integer(128);
Objects.requireNonNull(i);
Objects.requireNonNull(i, "参数不能为空");
Objects.requireNonNull(i, () -> "参数不能为空");
15. 检查两个对象是否相等
有时需要判断两个对象是否相等。此时可以使用Objects工具类。
注意:如果两个对象相等,则返回true,否则返回false。
建议:使用Objects工具类。
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(Objects.equals(i1, i2));
16.获取对象的hashCode
有时需要获取对象的hashCode。此时可以使用Objects工具类。
注意:返回的hashCode是一个int值。
建议:使用Objects工具类。
String str = "hello";
System.out.println(Objects.hashCode(str));
17. 检查字符串是否为null
有时需要检查字符串是否为null。此时可以使用StringUtils工具类。
注意:如果字符串为null,则返回true,否则返回false。
建议:使用StringUtils工具类。
String str1 = "hello";
String str2 = null;
System.out.println(StringUtils.isBlank(str1));
System.out.println(StringUtils.isBlank(str2));
System.out.println(StringUtils.isEmpty(str1));
System.out.println(StringUtils.isEmpty(str2));
18. 拆分字符串
有时需要拆分字符串。此时可以使用StringUtils工具类。
注意:返回的拆分后的字符串是一个String[]。
建议:使用StringUtils工具类。
String itemStr = "a,b,c";
System.out.println(StringUtils.split(itemStr, ","));
System.out.println(itemStr.split(","));
19. 检查是否为纯数字
有时需要检查字符串是否为纯数字。此时可以使用StringUtils工具类。
注意:如果字符串为纯数字,则返回true,否则返回false。
建议:使用StringUtils工具类。
String numStr = "123456";
String numStr1 = "123abc";
String numStr2 = "3.1415926";
System.out.println(StringUtils.isNumeric(numStr));
System.out.println(StringUtils.isNumeric(numStr1));
System.out.println(StringUtils.isNumeric(numStr2));
// 使用正则表达式
System.out.println(numStr.matches("\\d+"));
20. 将集合连接成字符串
有时需要将集合连接成字符串。此时可以使用StringUtils工具类。
注意:返回的连接后的字符串是一个String。
建议:使用StringUtils工具类。
List<String> list11 = Lists.newArrayList("a", "b", "c");
// 使用join方法
String joinStr = StringUtils.join(list11, ",");
System.out.println(joinStr);
// 使用String.join方法
String stringStr = String.join(",", list11);
System.out.println(stringStr);
21. 复制对象属性
有时需要复制对象属性。此时可以使用BeanUtils工具类。
注意:返回的复制后的对象是原对象的引用。
建议:使用BeanUtils工具类。
User user = new User();
user.setUserName("admin");
user.setRealName("管理员");
User user1 = new User();
BeanUtils.copyProperties(user, user1);
System.out.println(user1);
22. 获取指定类的指定方法
有时需要获取指定类的指定方法。此时可以使用ReflectionUtils工具类。
注意:返回的Method对象是指定类的指定方法。
建议:使用ReflectionUtils工具类。
Method method = ReflectionUtils.findMethod(User.class, "getUserName").get();
System.out.println(method);
23.获取指定方法的参数类型
有时需要获取指定方法的参数。此时可以使用ReflectionUtils工具类。
注意:返回的Method对象是指定类的指定方法。
建议:使用ReflectionUtils工具类。
Method method1 = ReflectionUtils.findMethod(User.class, "setUserName", String.class).get();
System.out.println(method1.getParameterTypes()[0]);
24. MD5加密
有时需要对字符串进行MD5加密。此时可以使用DigestUtils工具类。
注意:返回的MD5加密后的字符串是一个String。
建议:使用DigestUtils工具类。
String str3 = "hello";
String md5Str = DigestUtils.md5Hex(str3);
System.out.println(md5Str);
25.SHA256加密
有时需要对字符串进行SHA256加密。此时可以使用DigestUtils工具类。
注意:返回的SHA256加密后的字符串是一个String。
建议:使用DigestUtils工具类。
String str4 = "hello";
String sha256Str = DigestUtils.sha256Hex(str4);
System.out.println(sha256Str);
26.Hutool工具类
Hutool是一个功能丰富且易用的Java工具库,涵盖了字符串、数字、集合、编码、日期、文件、IO、加密、数据库JDBC、JSON、HTTP客户端等功能。
我现在就maven安装方式做个简单介绍:
在项目的pom.xml的dependencies中加入以下内容:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.26</version>
</dependency>
我这里就利用hutool对日期处理进行实例展示,其它的大家可以参照官网进行学习:
有时需要处理日期。此时可以使用DateUtil工具类。
注意:DateUtil工具类提供了很多方法,可以处理日期。
建议:使用hutool-DateUtil工具类提供了很多方法工具类。
// 获取当前日期
System.out.println(DateUtil.now());
// 字符串日期转指定格式日期
Date date = DateUtil.parse("2021-01-01 12:00:00", "yyyy-MM-dd HH:mm:ss");
System.out.println(date);
// 日期格式化
String formatDate = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss");
System.out.println(formatDate);
// 日期加减
Date date1 = DateUtil.offsetDay(date, 1);
System.out.println(date1);
// 日期比较
int compareDate = DateUtil.compare(date, date1);
System.out.println(compareDate);
// 日期计算
Date date2 = DateUtil.beginOfYear(date);
System.out.println(date2);
Date date3 = DateUtil.endOfYear(date);
System.out.println(date3);
// 日期计算
Date date4 = DateUtil.beginOfMonth(date);
System.out.println(date4);
Date date5 = DateUtil.endOfMonth(date);
System.out.println(date5);
// 日期计算
Date date6 = DateUtil.beginOfDay(date);
System.out.println(date6);
Date date7 = DateUtil.endOfDay(date);
System.out.println(date7);
结论
在本篇文章中,我们深入探讨了多个实用的Java工具类,展示了如何利用这些类来简化编程工作。无论是通过Objects
来进行对象的检查与操作,还是使用StringUtils
进行字符串的处理,抑或是借助BeanUtils
与ReflectionUtils
进行对象属性的复制和反射操作,这些工具类都为我们提供了强大的支持。此外,DigestUtils
则让数据加密变得简单高效,而hutool工具类我们只对日期处理进行介绍,从而解决我们日常工作日期转换的处理,hutool中还有许多封装的方法及类库,有兴趣的小伙伴可以继续参照官网文档进行学习和探索。
探索实用的Java工具类的更多相关文章
- 超级实用的 Java 工具类
超级实用的 Java 工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取 ...
- 16 个超级实用的 Java 工具类
阅读本文大概需要 4 分钟. 出处:alterem juejin.im/post/5d4a25b351882505c105cc6e 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用 ...
- 比较实用的Java工具类
一. org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流.socket.或者selector且不抛出异常,通常放在finally块 toString: ...
- Java工具类——数学相关的类
Java工具类--数学相关的类 在上一篇文章中,我们系统学习了 Java 里面的包装类,那么这篇文章,我们就来学习一下Java提供好的类--数学相关的类. 一.数学类介绍 在最早期学习 Java 基础 ...
- java工具类系列 (四.SerializationUtils)
java工具类系列 (四.SerializationUtils) SerializationUtils该类为序列化工具类,也是lang包下的工具,主要用于序列化操作 import java.io.Se ...
- Java工具类——通过配置XML验证Map
Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...
- 排名前 16 的 Java 工具类
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- 排名前16的Java工具类
原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...
- 第一章 Java工具类目录
在这一系列博客中,主要是记录在实际开发中会常用的一些Java工具类,方便后续开发中使用. 以下的目录会随着后边具体工具类的添加而改变. 浮点数精确计算 第二章 Java浮点数精确计算 crc32将任意 ...
- java工具类之按对象中某属性排序
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...
随机推荐
- JavaScript Library – Swiper
前言 官网已经有很好的教程了, 这篇只是记入一些我用过的东西和冷门知识. 参考 官网安装 官网 Demo 安装 yarn add swiper JS import Swiper from 'swipe ...
- 升讯威在线客服系统如何高性能同时支持 MySQL 和 SQL Server
升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放.开源.共享.努力打造 .net 社区的一款优秀开源产品. 前段时间我发表了一系列文章,开始介绍基 ...
- 图解YUV420、YUV420(YUY2)、YUV422(YVYU)
Y:亮度分量 UV:色度分量 1. 标准yuv指的是yuv420 一般看文章,会出现下面的公式,但不涉及具体的yuv格式,其实这一定指的是yuv420 Y与RGB的演算关系为:Y = 0.21 ...
- 简单粗暴的实现 Blazor Server 登录鉴权
既然是简单粗暴,那么就不用关心诸如 IDentityServer4,OAuth 之类的组件,也不使用 AuthenticationStateProvider.IAuthService, razor 页 ...
- 【PyTorch】state_dict详解
这篇博客来自csdn,完全用于学习. Introduce 在pytorch中,torch.nn.Module模块中的state_dict变量存放训练过程中需要学习的权重和偏执系数,state_dict ...
- dotnet Core 静态方法和构造方法
// 静态方法: // 特点:1.生命周期一旦创建-应用结束 才会结束 2.全局的 3.效率高(放在内存中) // 用户:用户登录,系统配置信息,系统设置,SQLHelper // 注意:静态的东西创 ...
- Vue 项目优化解决方案 有哪些 ?
1. 打包的时候 , 通过插件把css代码单独抽离出来使用 link 引入 2. 打包的时候 , 通过webpack内置插件optimization 把 公共的js代码抽离出来 ps:打包之后,代码 ...
- [2024领航杯] Pwn方向题解 babyheap
[2024领航杯] Pwn方向题解 babyheap 前言: 当然这个比赛我没有参加,是江苏省的一个比赛,附件是XiDP师傅在比赛结束之后发给我的,最近事情有点多,当时搁置了一天,昨天下午想起来这个事 ...
- KubeSphere 3.4.0 发布:支持 K8s v1.26
2023 年 07 月 26 日,KubeSphere 开源社区激动地向大家宣布,KubeSphere 3.4.0 正式发布! 让我们先简单回顾下之前三个大版本的主要变化: KubeSphere 3. ...
- KubeSphere 后端源码深度解析
这篇文章我们将学习在 vscode 上的 ssh remote 插件基础上,尝试 debug 和学习 KubeSphere 后端模块架构. 前提 安装好 vscode 以及 ssh remote co ...