轮子在我看来是可以重复利用的东西。好的程序猿肯定会有一个自己的代码库,里面是一些平时积累的工具代码。当需要的时候拿来就能用,简直妙不可言。来让我们认识认识这些轮子吧。
Java 8 Stream
Stream 不算是工具库,但是通过 stream 提供的一系列方法,可以实现集合的过滤、分组、集合转换等诸多操作。
例如下面的方法,实现列表元素根据某个字段去重的功能。
1 | List<User> userList = new ArrayList(); |
apache commons
官方地址:http://commons.apache.org/
这不是一个库,而是一系列的工具库。
由于包含的库过多,我就不一一列举了,可以到官网一探。有集合处理的、数学计算的、IO 操作的等等,其中最常用的莫过于 Apache Commons Lang 和 Apache Commons Collections 这两个。
Apache Commons Lang 包括一系列工具类,有字符串相关的、时间处理的、反射的、并发包的等等,Apache Commons Collections 专门用作集合处理。
下面举几个例子说明一下,更详细的内容可以到官网查看文档。
- 字符串判空操作
1 | String s = ""; |
- 判断集合是否为空
1 | Boolean isNotEmpty = CollectionUtils.isNotEmpty(list); |
- 获取类的全名称
1 | ClassUtils.getName(ClassUtils.class); |
- 反射获取某个类的所有 Field
1 | Field[] fields = FieldUtils.getAllFields(User.class); |
Google Guava
官方地址:https://github.com/google/guava
和 Apache Commons 有点儿类似,它也是包含了一系列的比如字符串、集合、反射、数学计算等的操作封装,还可以用作 JVM 缓存。
- New 各种对象
1 | List<String> list = Lists.newArrayList(); |
- 列表转符号分隔的字符串
1 | List<String> list = new ArrayList<String>(); |
- 求交集、并集、差集等
1 | Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4, 5, 6); |
OkHttp3
官方地址:https://square.github.io/okhttp/
一个 HTTP 客户端,使用简单,性能良好,是时候放弃 HttpClient 了。
- get请求
1 | OkHttpClient client = new OkHttpClient(); |
- post请求
1 | public static final MediaType JSON |
Json 系列
- Jackson:spring 默认的 Json 序列化工具,其实已经足够用了。
- Gson:Google 出品,功能齐全。
- FastJson:阿里出品,算法良好,性能最优。(存在部分漏洞)
EasyExcel
官方地址:https://www.yuque.com/easyexcel/doc/easyexcel
阿里开源的 Excel 操作工具库,可以看做是 Apache POI 的增强封装版、优化版。
如果你的数据量很大,那用 EasyExcel 可以节省内存,提升效率,并且没有并发风险。
如果你的 Excel 足够复杂,那用 EasyExcel 会比你直接用 POI 少些很多代码。
Hutool
官方地址:https://hutool.cn/docs/#/
- 一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:
模块 | 介绍 |
---|---|
hutool-aop | JDK动态代理封装,提供非IOC下的切面支持 |
hutool-bloomFilter | 布隆过滤,提供一些Hash算法的布隆过滤 |
hutool-cache | 简单缓存实现 |
hutool-core | 核心,包括Bean操作、日期、各种Util等 |
hutool-cron | 定时任务模块,提供类Crontab表达式的定时任务 |
hutool-crypto | 加密解密模块,提供对称、非对称和摘要算法封装 |
hutool-db | JDBC封装后的数据操作,基于ActiveRecord思想 |
hutool-dfa | 基于DFA模型的多关键字查找 |
hutool-extra | 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等) |
hutool-http | 基于HttpUrlConnection的Http客户端封装 |
hutool-log | 自动识别日志实现的日志门面 |
hutool-script | 脚本执行封装,例如Javascript |
hutool-setting | 功能更强大的Setting配置文件和Properties封装 |
hutool-system | 系统参数调用封装(JVM信息等) |
hutool-json | JSON实现 |
hutool-captcha | 图片验证码实现 |
hutool-poi | 针对POI中Excel和Word的封装 |
hutool-socket | 基于Java的NIO和AIO的Socket封装 |
可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块。