不少开发者在开发过程中想要使用一个工具类,常常不确定该实现是否已经存在了,因此在会当场手撸一个,但有些功能其实 jdk 或者依赖的第三方库中已经有了。
这里我分享下我了解的比较好用的工具类方法:
// Objects
// 两个对象是否相等,里面实现了 null 的判断
Objects.equals(obj1, obj2);
// Function
// 等同于 a -> a
Function.identity();
// 整个库都非常有用,这里我举两个例子
// 单词首字母大写
StringUtils.capitalize("xx");
// 取字符串固定长度的子串(从左往右,不担心 null 和整体长度)
StringUtils.left("aa", 2); // right 是从右往左
// 关于 io 的操作,如果有相关需求,不妨去里面找找
// 下载链接到 File
FileUtils.copyURLToFile();
Spring 基本上做 Web 的项目是必带的,没事可以去它的工具包里翘翘,或许可省下一些功夫。
大家有什么常用的小技巧和小心得可以相互分享下。
1
kaf 279 天前 ![]() hutool
|
![]() |
2
tool2d 279 天前
我一直琢磨着,想通过预处理源码,把 String 的字符串对比功能,从调用函数,改成==操作符重载。
又一直没动力去做这件事情,还是写太少了。 |
3
SkyLine7 279 天前
hutool
|
5
Ayanokouji 279 天前
@tool2d 换 kotlin
|
6
optional 279 天前 via iPhone
apache 的都比较好用,但是规范规定不用 spring 的 utils
|
7
TWorldIsNButThis 279 天前 via iPhone
心得就是换 kotlin
|
![]() |
8
conglovely 279 天前
hutool
|
![]() |
9
Akitora 279 天前
|
![]() |
10
luckyrayyy 279 天前
apache-commons 、guava 、hutool 太多了,这些工具类看一遍,日常的需求大部分就覆盖了。
|
11
sss15 279 天前
hutool
|
![]() |
12
Nooooobycat 279 天前 ![]() 一个很多人都不知道的,JDK 自带的拼接字符串辅助类,java.util.StringJoiner 。它有 2 个构造函数:
1. new StringJoiner(delimiter) 2. new StringJoiner(delimiter, prefix, suffix) 那么是用来干什么的呢? 1. 做 Leetcode 等 OJ 经常碰见的需求,把一个数组输出成一行,每个元素用逗号分隔,但是结尾不能有逗号: 正例:1 ,2 ,3 ,4 ,5 反例:1 ,2 ,3 ,4 ,5 , joiner := new StringJoiner(",") foreach item in array: joiner.add(item) joiner.toString() 2. 输出类似 Response<name: xx, age: yy, id: zz> 这样的格式,其实也相当于 1 中的用某个符号分隔一系列元素。只是有前缀后缀: joiner := new StringJoiner(",", prefix="Response<", suffix=">") foreach item in array: joiner.add(item) joiner.toString() |
![]() |
13
Nooooobycat 279 天前
@Nooooobycat
```java joiner := new StringJoiner(",") foreach item in array: joiner.add(item) joiner.toString() ``` |
![]() |
14
lyusantu 279 天前
有一个需求要求 ID 格式为 yyyyMMdd0~100000(不足 6 位往前补 0 ,具体数字会以参数形式传递)
实现方式:return DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now()) + String.format("%06d", number) |
![]() |
15
codergrowing 279 天前
@Nooooobycat #12 确实是不知道这个类的存在,一直都是用的 guava ,更方便一些,Joiner.on(",").join(iterable);
|
16
outas 279 天前
hutool 最符合国内这些 curd 的业务,其他工具类看场景,哪个方便没有坑就用哪个
|
![]() |
17
chendy 279 天前
@Nooooobycat 头一次见这个类,简单的 join 直接用 String 自己的 join 方法就可以了,需要前后缀的用这个确实方便
|
![]() |
18
Morii 279 天前
hutool 基本能覆盖国内 curd 的大多数场景,代码质量还算可以,作者维护比较上心,我觉得值得使用
另外注释是中文对部分开发人员很友好 |
19
matepi 279 天前
尽量别用,要用也只用 jdk 。尤其是各种序列化反序列化,能少用一种就少用一种,用项目 /公司里面别人已经用过的,用的多的。不然开源漏洞 fastjson 啥的真是超烦人。
System.arraycopy Arrays String.format Pattern 、Matcher 正则、replace Files 、Paths |
20
initdada 279 天前
orika 、jackson
|
21
martin2233 279 天前
hutool
|
22
tianmalj0613 279 天前
hutool :
StrUtil 里面有常用字符的常量池,比如 ':' '_' '-' 等等 BCrypt 用户密码常用加密算法实现 IdcardUtil 中国身份证输入合法性校验,可获取年龄,性别 暂时想到这几个吧,有些工具文档上没有,但是可能人家也包含了 |
23
Leviathann 279 天前
@Nooooobycat 一般直接 stream join
|
![]() |
24
dayudayupao 279 天前
hutool yyds
|
![]() |
25
alen0206 279 天前
guava
|
![]() |
26
zoyua 279 天前
guava
|
![]() |
27
codingbody 279 天前 via iPhone
为啥都喜欢 hutool
|
![]() |
28
zhaorunze 279 天前
apache 的时间类有 bug ,或者我调用错了,获取的时候少了八个小时
|
![]() |
29
echo1937 279 天前 via iPhone
用 guava 比较多,apache-commons 基本不用
|
![]() |
30
wanguorui123 279 天前
BeanUtil.copy
StringUtils.isNullOrEmpty |
31
yao00jun 279 天前
guava
|
32
cjbi 279 天前
Jdk 没有的我一般网上搜下看有没有别人写好的能满足需求的,没有就自己手搓,能少依赖就少依赖三方库
|
![]() |
33
zhaogaz 279 天前
工具有啥好分享的,遍地都是,没有再找一个呗。。。
兴致高了 仔细看看提供的函数。。。 不过我个人习惯是尽可能用现成的,能不写就不写,不得不写全靠抄(。 |
![]() |
34
xuanbg 279 天前
尽量少依赖第三方库。我是自己手撸一个,有需要增加新方法就加进去,改个版本发到私服上面。
|
![]() |
35
james2013 279 天前 via Android
hutool
|
![]() |
36
oneisall8955 279 天前 via Android ![]() 楼上没提及的 vavr
|
![]() |
37
theliang 278 天前
截止目前 guava 6 票 hutool12 票,我给 hutool+1
如果非要说具体工具类的话, org.apache.commons.lang3.StringUtils#isAnyBlank(CharSequence... css) # 可以传递多个字符串判断其中是否有空的 |
![]() |
39
jklove123bai 278 天前
@zhaorunze 少 8 小时大约是用的 utc 时间了
|
![]() |
40
EscYezi 278 天前 via iPhone ![]() eclipse collection
|
![]() |
41
zhaorunze 278 天前
@jklove123bai 是的,没提示就很坑了,随便找的一个包,后来就长记性了,看看实现
|
![]() |
43
yuekcc 278 天前 ![]() 一直很好奇,为什么这么多工具库。jdk 自带的 api 就这么难用吗?
|