一些个人常用到的工具类整理

工具类
placeholder image
admin 发布于:2022-07-17 22:12:34
阅读:loading

工具类是多种多样的,任何逻辑都可以封装为工具类,以工具类的方式对外提供稳定且高效的公用处理逻辑这在日常工作中是必不可少的,取决于个人的硬核实力,也取决于个人的知识广度,不一定非要自己去写,如果了解到哪些开源项目中有对于什么逻辑提供了工具类的支持,直接拿来主义即可。而且工具类在编写时也要特别注意实现的合理性和引用时的便捷性,并不是谁想写都是可以写的。本文将个人日常高频使用到的一些工具类整理汇总(一时想不到那么全,随时再补充),与前文中的Apache Commons Lang3项目和Google Guava项目互相结合参考,详细如下。

工具类

模块类名说明







Apache Commons

FileUtilsCommons IO项目中的文件操作工具类,创建文件、读取文件、写入文件、拷贝文件、重命名、删除等各种操作,另有将文件大小转换为KB、MB、GB等转换实现。
FilenameUtilsCommons IO项目中的文件操作工具类,提供文件名称的操作,包含文件名称前缀名和后缀名等多个函数实现。
IOUtilsCommons IO项目中的IO操作工具类,提供输入输出流转换Buffer流,拷贝流(分段)、关闭流、读取流、写入流等多个函数实现。
FileAlterationMonitor
Commons IO项目中的文件变更监控实现,可监控文件夹和文件的创建、修改、删除等操作。
BeanUtilsCommons BeanUtils项目中的工具类,可实现两个bean属性拷贝,也可实现map互转bean,推荐使用Spring Core中的同名类。
CharsetsCommons Codec项目中的常量类,可用于utf-8等字符编码的常量获取。
CharEncoding  Commons Codec项目中的常量类,可用于utf-8等字符编码的常量获取。
DigestUtilsCommons Codec项目中的加密解密工具类,MD5/SHA等。
Base64Commons Codec项目中的Base64编码解码工具类。


mybatisplus

BeanUtils提供单个和批量的beanToMap和map2Bean互相转换工具类。
IdWorker多种Id生成方式,包含雪花Id、商品Id、UUId。
StringPoolString特殊字符常量定义。












Spring Core

ClassPathResource从classes中加载资源文件,支持jar文件中查找文件。
ParameterNameDiscoverer通过反射获取class字节码中定义的原始变量名称(方法参数),提供多个实现类,重点关注LocalVariableTableParameterNameDiscoverer
DataSize可根据long类型参数转换未文件大小操作,同Commons IO项目中的FileUtils的实现,另有DataUnit枚举定义文件大小单位以及单位进制的大小。
Base64Utils封装java8中的Base64工具类,JDK中的实现与Apache Commons Codec中的实现略有差异,在某些场景会出现节码不一致的问题,若遇到类似问题,可尝试切换Base64实现解决。(曾经在对接接口时,解析了非Java语言生成的Base64编码,使用JDK内置的无法节码成功,切换至Apache的则正确)
ClassUtils反射Class的工具类,提供多种操作Class的方法。
CollectionUtils集合类的操作工具类,集合空或非空判断,数组转集合,数组追加至集合,集合是否包含元素等。
DigestUtils同Apache Commons Codec项目中的DigestUtils工具类。
FileCopyUtils文件拷贝工具类,提供文件到文件,文件到byte[],输入流至输出流,输入字符流至字符串等。
IdGenerator简单的Id生成器,主要还是围绕JDK中的UUID而来,有提供简单的ID生成器,大概使用0000-000-00...0001的十六进制递增的实现。
ResourceUtils用于将资源位置解析为文件系统中的文件的实用方法,同时提供了各种找文件的常量和找资源文件的方法。
SerializationUtils序列化工具类,将对象序列话为byte数组和将byte反序列化为对象。
StopWatch程序执行时间计时器,同Apache Commons Lang3和Google Guava中的工具类。
StreamUtils输入流至byte[]或输入流至String或输入流至输出流byte[]以及输入流至输出流等多种Stream流操作。
SystemPropertyUtilsel表达式语法的变量前缀与后缀常量定义。
Spring WebHttpHeaders各种Http Header的常量命名定义。
HttpMethod各种Http 请求类型的枚举定义。
HttpStatus各种Http 请求状态码的定义和状态码对应的错误描述,如404为Not Found;500为Internal Server Error。
MediaType各种Http 请求媒体类型定义。
JavaScriptUtils转义JavaScript脚本代码。
HtmlUtils转义和反转Html代码。

集合转换

//1.HashMap的Key与Value互转
Map<String , String> dataMap = this.getDataMap();
BidiMap<String , String> inverseDataMap = new DualHashBidiMap<>(dataMap).inverseBidiMap();

//2.List转换为Map,Map的key可以是复杂结构
List<User> userList = this.getUserList();
Map<String , String) map1 = userList.stream().collect(Collectors.toMap(User:getUserId,User::getUserName));//key ,value均为字符串
Map<String , User> map2 = userList.stream().collect(Collectors.toMap(User:getUserId,Function.identity()));//key为字符串 ,value为List中对应的数据
//key为自定义方法,value为当前List数据对象且当存在重复时使用后出现的覆盖前出现的数据
Map<String , User> map3 = userList.stream().collect(Collectors.toMap(this::getUserNameKey , Function.identity() , (oldValue , newValue) -> newValue);

//3.List<Entity>至List<String>
List<String> dataList = this.getUserList().stream().map(u -> u.getUserId()).collect(Collectors.tolist());//从List<User>中挑选一个属性userId作为数据

//4.List<User>转换为Map<String , List<User>>
Map<String , List<User>> listMap = this.getUserList().stream().collect(Collectors.groupingBy(User::getUserName);

//5.List<User>集合删除
this.getUserList().removeIf(item -> return "chendd".equals(item.getUserName()));

//6.String[]转换为List<String>
List<String> nameList = Stream.of(new String[]{"a" , "b" , "c"}).collect(Collectors.tolist());;

//7.List数据分段处理
List<List<String>> partIdList = Lists.partition(Lists.newArrayList("a" , "b" , "c" , "d" , "e") , 2);
partIdList.forEach(list -> {
    //每个子集合中最多按2条数据分段
});

//就这样吧,另有更多集合操作懒的写了


 点赞


 发表评论

当前回复:作者

 评论列表


留言区