网站首页 > java教程 正文
前言
- 在编程过程中,经常涉及对字符串、集合等操作,但是往往使用jdk自带的方法,需要自己去判空,需要自己构建很多重复的代码,使得代码比较冗余,比较绕,为此推荐大家可以多使用工具类,提升代码稳定性的同时,提高代码的简洁。
字符串处理
- 相关maven的pom依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
最经典的工具类,StringUtils
- 字符串判断相等
StringUtils.equals(str1 , str2) 字符串判断不推荐使用str1.equals(str2), 经常会导致空指针(NPE), 当然, Objects.equals(str1, str2) 工具类也可以
- 字符串判空
StringUtils.isNotBlank(str1)
使用场景如:上游参数校验时,判断 xxx 参数必须有值,不能为空
集合工具
- 相关maven的pom依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
- 使用工具创建一个ArrayList
相比new ArrayList<>()方式,工具类采用Lists.newArrayList() 可以进行泛型的类型推导,而不用在<>中写明。
同时,支持不定入参,方便快速构建一个常量的List,使用场景,一般如:当前业务某些状态单据需要拦截,而需要拦截的单据状态是多个,
使用原生的,需要写成:new ArrayList<>(Arrays.asList(1,2,3)), 而采用工具类,只需要Lists.newArrayList(1, 2, 3), 相比较而言代码会简洁明了一些。
- 集合判空
集合判空是最常见的场景了,比如:入参是批量操作数据,需要对入参校验非空,否则就报错;或者是从集合中取对象需要先判断集合是否非空。
这里面非空就有两层含义了,一方面需要判断是否为null,另一方面需要判断size,如果不判断为null,那么直接空指针异常(NPE)。
所以常见需要写成:list != null && list.isEmpty() , 而 使用工具类 只用:CollectionUtils.isEmpty(list), 同时支持非空判断:CollectionUtils.isNotEmpty(list)
- 集合取交集,并集,差集。
如果有这一方面需求的场景,那采用这个工具能帮助你快速开发。
List<Integer> list1 = Lists.newArrayList(1, 2, 3);
List<Integer> list2 = Lists.newArrayList(1, 2, 4);
// 取交集,结果为 1,2
Collection<Integer> intersection = CollectionUtils.intersection(list1, list2);
// 取并集,结果为 1,2,3,4
Collection<Integer> union = CollectionUtils.union(list1, list2);
// 取对称差集,结果为3,4
Collection<Integer> disjunction = CollectionUtils.disjunction(list1, list2);
// 取差集,结果为 3
Collection<Integer> subtract = CollectionUtils.subtract(list1, list2);
- 好用的数据结构Pair 和 Triple
一个方法只能有一个返回值,可以放在bean 或者 map ,这个方法可能是private的私有方法,仅做内部的计算等使用,使用bean或者map都大材小用了,可以使用更加轻量级的Pair 和 Triple。
其中 Pair 返回两个参数,Triple 是三个参数,里面可以放任意的对象。
以字符串举例:
Pair.of("1", "2");
Triple.of("1", "2", "3")
Map工具
- pom依赖如上
- 使用工具创建一个HashMap
Maps.newHashMap()
- 使用工具操作Map
// 判空
MapUtils.isEmpty(map);
MapUtils.isNotEmpty(map);
// 取值
List<String> valueList = MapUtils.getObject(map, key, Lists.newArrayList());
取值支持泛型,自动推导,最关键的是帮你判空了,即使map为null都没关系,而且支持不存在则返回默认值,第三个参数就是。
- Map中value是List存值需要多重判断
Map<Integer, List<String>> map = Maps.newHashMap();
if (map.containsKey(key)) {
map.get(key).add(value);
} else {
map.put(key, Lists.newArrayList(value));
}
可以看出,如果不进行多重判空,在进行处理的时候,一不小心就空指针了,而有了工具类就不用了。
ArrayListMultimap<Integer, String> arrayListMultimap = ArrayListMultimap.create();
// 存进去很方便,开箱即用
arrayListMultimap.put(key, value);
// 取出来也很方便
List<String> valueList = arrayListMultimap.get(key);
// 同时也具有 线程安全版本
Multimaps.synchronizedMultimap(arrayListMultimap);
写在最后:当然还有很多使用到的,就不一一列举,只写了笔者工作中高频使用的哈,还有哪些好用的慢慢学习。
猜你喜欢
- 2024-12-08 干掉复杂的工具类,国产Java工具类库 Hutool 很香!
- 2024-12-08 Java判空,Optional和工具类真香?还是if(obj == null)更靠谱?
- 2024-12-08 100个Java工具类之44:集合工具类Apache之ListUtils
- 2024-12-08 100个Java工具类之25:Java工具包Hutool(下)
- 2024-12-08 100个Java工具类之40:对象工具类Apache之ObjectUtils
- 2024-12-08 JDK8中新增的Optional工具类真的很好用哦,建议收藏
- 2024-12-08 100个Java工具类之8:java.util包下的Collections
- 2024-12-08 100个Java工具类之24:强大的Java工具包Hutool(上)
- 2024-12-08 Java常用的几种属性拷贝工具类使用总结
- 2024-12-08 开源谷歌java工具类-guava(非常实用)
你 发表评论:
欢迎- 06-04C++优先级调度队列(Priority Queue)
- 06-04数据结构与算法-优先队列(优先队列 数组实现)
- 06-04什么是优先队列?(优先队列原理)
- 06-04终于有架构大牛把分布式系统概念讲明白了,竟然用了足足800页
- 06-04分布式事物如何保证接口请求顺序性?
- 06-04微服务下分布式事务模式的详细对比
- 06-04彻底掌握分布式事务2PC、3PC模型(分布式事务 三阶段)
- 06-04分布式事务最全详解(看这篇就够了)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)