能常用的一些SpringBoot内置工具类
Collections
- 排序:
- 使用Collections工具是如何实现升序和降序的:
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
Collections.sort(list);//升序
System.out.println(list);
Collections.reverse(list);//降序
System.out.println(list);
- 运行结果:
[1, 2, 3]
[3, 2, 1]
- 获取最大或最小值:
- 有时候需要找出集合中的最大值或者最小值,这时可以使用Collections的max和min方法.
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
Integer max = Collections.max(list);//获取最大值
Integer min = Collections.min(list);//获取最小值
System.out.println(max);
System.out.println(min);
- 执行结果:
3
1
- 转换线程集合:
- 我们都知道,java中的很多集合,比如:ArrayList、LinkedList、HashMap、HashSet等,都是线程不安全的。
- 换句话说,这些集合在多线程的环境中,添加数据会出现异常。
- 这时,可以用Collections的synchronizedxxx方法,将这些线程不安全的集合,直接转换成线程安全集合。例如:
ist<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
List<Integer> integers = Collections.synchronizedList(list);//将ArrayList转换成线程安全集合
System.out.println(integers);
- 它的底层会创建SynchronizedRandomAccessList或者SynchronizedList类,这两个类的很多方法都会用synchronized加锁。
- 返回空集合
- 我们在判空之后,需要返回空集合,就可以使用emptyList方法
private List<Integer> fun(List<Integer> list) {
if (list == null || list.size() == 0) {
return Collections.emptyList();
}
//业务处理
return list;
}
- 二分查找
- binarySearch方法提供了一个非常好用的二分查找功能,只用传入指定集合和需要找到的key即可
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
int i = Collections.binarySearch(list, 3);//二分查找
System.out.println(i );
- 运行结果
2
- 转换成不可修改的集合
- 了防止后续的程序把某个集合的结果修改了,有时候我们需要把某个集合定义成不可修改的,使用Collections的unmodifiablexxx方法就能轻松实现
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
List<Integer> integers = Collections.unmodifiableList(list);
integers.add(4);
System.out.println(integers);
- 运行结果
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
at com.sue.jump.service.test1.UtilTest.main(UtilTest.java:19)
CollectionUtils
- 集合判空
- 通过CollectionUtils工具类的isEmpty方法可以轻松判断集合是否为空,isNotEmpty方法判断集合不为空。
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
if (CollectionUtils.isEmpty(list)) {
System.out.println("集合为空");
}
if (CollectionUtils.isNotEmpty(list)) {
System.out.println("集合不为空");
}
- 对两个集合进行操作
- 有时候我们需要对已有的两个集合进行操作,比如取交集或者并集等。
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
List<Integer> list2 = new ArrayList<>();
list2.add(2);
list2.add(4);
//获取并集
Collection<Integer> unionList = CollectionUtils.union(list, list2);
System.out.println(unionList);
//获取交集
Collection<Integer> intersectionList = CollectionUtils.intersection(list, list2);
System.out.println(intersectionList);
//获取交集的补集
Collection<Integer> disjunctionList = CollectionUtils.disjunction(list, list2);
System.out.println(disjunctionList);
//获取差集
Collection<Integer> subtractList = CollectionUtils.subtract(list, list2);
System.out.println(subtractList);
- 执行结果
[1, 2, 3, 4]
[2]
[1, 3, 4]
[1, 3]
Lists
- 如果你引入com.google.guava的pom文件,会获得很多好用的小工具。这里推荐一款com.google.common.collect包下的集合工具:Lists。
- 创建空集合
- 创建一个空集合。这时可以用Lists的newArrayList方法
List<Integer> list = Lists.newArrayList();
- 快速初始化集合
- 我们想给一个集合中初始化一些元素。这时可以用Lists的newArrayList方法
List<Integer> list = Lists.newArrayList(1, 2, 3);
- 执行结果
[1, 2, 3]
Objects
- jdk7之后,提供了Objects工具类,我们可以通过它操作对象
- 对象判空
- 在java中万事万物皆对象,对象的判空可以说无处不在。Objects的isNull方法判断对象是否为空,而nonNull方法判断对象是否不为空
Integer integer = new Integer(1);
if (Objects.isNull(integer)) {
System.out.println("对象为空");
}
if (Objects.nonNull(integer)) {
System.out.println("对象不为空");
}
- 对象为空抛异常
- 如果我们想在对象为空时,抛出空指针异常,可以使用Objects的requireNonNull方法
Integer integer1 = new Integer(128);
Objects.requireNonNull(integer1);
Objects.requireNonNull(integer1, "参数不能为空");
Objects.requireNonNull(integer1, () -> "参数不能为空");
- 判断两个对象是否相等
- 我们经常需要判断两个对象是否相等,Objects给我们提供了equals方法
Integer integer1 = new Integer(1);
Integer integer2 = new Integer(1);
System.out.println(Objects.equals(integer1, integer2));
- 获取对象的hashCode
- 如果你想获取某个对象的hashCode,可以使用Objects的hashCode方法
String str = new String("abc");
System.out.println(Objects.hashCode(str));
- 运行结果
96354
BooleanUtils
- 如果你使用了布尔的包装类:Boolean,总感觉有点麻烦,因为它有三种值:null、true、false。我们在处理Boolean对象时,需要经常判空
- 判断true或false
- 判断某个参数的值是true或false,可以直接使用isTrue或isFalse方法
Boolean aBoolean = new Boolean(true);
System.out.println(BooleanUtils.isTrue(aBoolean));
System.out.println(BooleanUtils.isFalse(aBoolean));
- 判断不为true或不为false
- 可以使用isNotTrue或isNotFalse方法
Boolean aBoolean = new Boolean(true);
Boolean aBoolean1 = null;
System.out.println(BooleanUtils.isNotTrue(aBoolean));
System.out.println(BooleanUtils.isNotTrue(aBoolean1));
System.out.println(BooleanUtils.isNotFalse(aBoolean));
System.out.println(BooleanUtils.isNotFalse(aBoolean1));
- 转换成数字
- 如果你想将true转换成数字1,false转换成数字0,可以使用toInteger方法
Boolean aBoolean = new Boolean(true);
Boolean aBoolean1 = new Boolean(false);
System.out.println(BooleanUtils.toInteger(aBoolean));
System.out.println(BooleanUtils.toInteger(aBoolean1));
- 运行结果
1
0
- Boolean转换成布尔值
- 我们有时候需要将包装类Boolean对象,转换成原始的boolean对象,可以使用toBoolean方法
Boolean aBoolean = new Boolean(true);
Boolean aBoolean1 = null;
System.out.println(BooleanUtils.toBoolean(aBoolean));
System.out.println(BooleanUtils.toBoolean(aBoolean1));
System.out.println(BooleanUtils.toBooleanDefaultIfNull(aBoolean1, false));
StringUtils
- 在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、比较字符串、去掉多余空格、拼接字符串、使用正则表达式等等
- rg.apache.commons.lang3包下的StringUtils工具类,给我们提供了非常丰富的选择。
- 字符串判空
- 空字符串,不只是null一种,还有""," ","null"等等,多种情况
String str1 = null;
String str2 = "";
String str3 = " ";
String str4 = "abc";
System.out.println(StringUtils.isEmpty(str1));
System.out.println(StringUtils.isEmpty(str2));
System.out.println(StringUtils.isEmpty(str3));
System.out.println(StringUtils.isEmpty(str4));
System.out.println("=====");
System.out.println(StringUtils.isNotEmpty(str1));
System.out.println(StringUtils.isNotEmpty(str2));
System.out.println(StringUtils.isNotEmpty(str3));
System.out.println(StringUtils.isNotEmpty(str4));
System.out.println("=====");
System.out.println(StringUtils.isBlank(str1));
System.out.println(StringUtils.isBlank(str2));
System.out.println(StringUtils.isBlank(str3));
System.out.println(StringUtils.isBlank(str4));
System.out.println("=====");
System.out.println(StringUtils.isNotBlank(str1));
System.out.println(StringUtils.isNotBlank(str2));
System.out.println(StringUtils.isNotBlank(str3));
System.out.println(StringUtils.isNotBlank(str4));
- 运行结果
true
true
false
false
=====
false
false
true
true
=====
true
true
true
false
=====
false
false
false
true
- 分隔字符串
- 隔字符串是常见需求,如果直接使用String类的split方法,就可能会出现空指针异常
- 使用StringUtils的split方法会返回null
String str1 = null;
System.out.println(StringUtils.split(str1,","));
System.out.println(str1.split(","));
- 运行结果
null
Exception in thread "main" java.lang.NullPointerException
at com.sue.jump.service.test1.UtilTest.main(UtilTest.java:21)
- 判断是否纯数字
- 给定一个字符串,判断它是否为纯数字,可以使用isNumeric方法
String str1 = "123";
String str2 = "123q";
String str3 = "0.33";
System.out.println(StringUtils.isNumeric(str1));
System.out.println(StringUtils.isNumeric(str2));
System.out.println(StringUtils.isNumeric(str3));
- 运行结果
true
false
false
- 将集合拼接成字符串
- 我们需要将某个集合的内容,拼接成一个字符串,然后输出,这时可以使用join方法
List<String> list = Lists.newArrayList("a", "b", "c");
List<Integer> list2 = Lists.newArrayList(1, 2, 3);
System.out.println(StringUtils.join(list, ","));
System.out.println(StringUtils.join(list2, " "));
- 运行结果
a,b,c
1 2 3
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章链接: