java中节省90时间的常有的工具类
下面一起来看看可以节省 90% 的加班时间的第三方开源库吧。第一个介绍的必须是 Apache 下的 Commons 库,第二个是 google 开源的 Guava 库, 第三个是 Hutool工具类库。 Apache Commons
Apache Commons 是一个功能非常强大、经常被使用到的库。它有 40 个左右的类库,包含了对字符串、日期、数组等的操作。 Lang3
Lang3 是一个处理 Java 中基本对象的包,比如用 StringUtils 类操作字符串、ArrayUtils 类操作数组、DateUtils 类可以处理日期、MutablePair 类可以返回多个字段等等。 字符串操作
对字符串快速操作,在 if else 的少写判空条件。 1 2 3 4 5 6 7 8 9 StringUtils.isBlank(" "); //是不是空字符串 StringUtils.isAnyBlank("a", "", "c"); // 其中一个是不是空字符串 StringUtils.isNumeric("1"); //字符串是不是全是数字组成,"." 不算数字 StringUtils.remove("sgsgsdfasd", "a") //移除字符串 日期操作
终于可以不用 SimpleDateFormat 格式化日期了,DateUtils.iterator 可以获取一段时间。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20Date date = DateUtils.parseDate("2021-07-01", "yyyy-MM-dd"); DateUtils.addDays(date,1);//加一天 DateUtils.isSameDay(date, new Date());//比较 /* 获取一段日期 RANGE_WEEK_SUNDAY 从周日开始获取一周日期 RANGE_WEEK_MONDAY 从周一开始获取一周日期 RANGE_WEEK_RELATIVE 从当前时间开始获取一周日期 RANGE_WEEK_CENTER 以当前日期为中心获取一周日期 RANGE_MONTH_SUNDAY 从周日开始获取一个月日期 RANGE_MONTH_MONDAY 从周一开始获取一个月日期 */ Iterator iterator = DateUtils.iterator(date, DateUtils.RANGE_WEEK_CENTER); while (iterator.hasNext()) { Calendar next = iterator.next(); System.out.println(DateFormatUtils.format(next, "yyyy-MM-dd")); } 返回多个字段
有时候在一个方法中需要返回多个值的时候,经常会使用 HashMap 返回或者是 JSON 返回。Lang3 下已经帮我们提供了这样的工具类,不需要再多写 HashMap 和 JSON 了。 1 2 3 4 5MutablePair mutablePair = MutablePair.of(2, "这是两个值"); System.out.println(mutablePair.getLeft() + " " + mutablePair.getRight()); MutableTriple mutableTriple = MutableTriple.of(2, "这是三个值", new Date()); System.out.println(mutableTriple.getLeft() + " " + mutableTriple.getMiddle() + " " + mutableTriple.getRight()); ArrayUtils 数组操作
ArrayUtils 是专门处理数组的类,可以让方便的处理数组而不是需要各种循环操作。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24//合并数组 String[] array1 = new String[]{"value1", "value2"}; String[] array2 = new String[]{"value3", "value4"}; String[] array3 = ArrayUtils.addAll(array1, array2); //clone 数组 String[] array4 = ArrayUtils.clone(array3); //数组是否相同 EqualsBuilder.reflectionEquals(array3, array4); //toString ArrayUtils.toString(array4) //反转数组 ArrayUtils.reverse(array4); //二维数组转 map Map arrayMap = (HashMap)ArrayUtils.toMap(new String[][]{ {"key1", "value1"}, {"key2", "value2"} }); for(String s : arrayMap.keySet()) { System.out.println(arrayMap.get(s)); } collections4 集合操作
commons-collections4 增强了 Java 集合框架,提供了一系列简单的 API 方便操作集合。
maven 依赖 1 2 3 4 5 org.apache.commons commons-collections4 4.4 CollectionUtils 工具类
这是一个工具类,可以检查 null 元素不被加入集合,合并列表,过滤列表,两个列表的并集、差集、合集。有部分功能在 Java 8 中可以被 Stream API 替换。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32//null 元素不能加进去 List arrayList1 = new ArrayList(); arrayList1.add("a"); CollectionUtils.addIgnoreNull(arrayList1, null); System.out.println(arrayList1.size()); //排好序的集合,合并后还是排序的 List arrayList2 = new ArrayList(); List arrayList3 = new ArrayList(); List arrayList4 = CollectionUtils.collate(arrayList2, arrayList3); System.out.println(arrayList4); // 过滤,只保留 b CollectionUtils.filter(arrayList4, new Predicate() { public boolean evaluate(String s) { if( s.equals("b")) { return true; } return false; } }); //交集 CollectionUtils.retainAll(arrayList4, arrayList3); //并集 CollectionUtils.union(arrayList4, arrayList3 //差集 CollectionUtils.subtract(arrayList4, arrayList3) Bag 统计次数
用于统计值在集合中出现的次数。 1 2 3 4 5 6Bag bag = new HashBag(); bag.add("a"); bag.add("b"); bag.add("a"); bag.add("c", 3); System.out.println(bag.getCount("a")); beanutils Bean 操作
beanutils 是通过反射机制对 JavaBean 进行操作的。比如对 Bean 进行复制、map 转对象、对象转 Map。
maven 依赖 1 2 3 4 5 commons-beanutils commons-beanutils 1.9.4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21//Bean public class User { private String name; //省略get/set } //copy Bean User user1 = new User(); user1.setName("李四"); User user2 = (User) BeanUtils.cloneBean(user1); System.out.println(user2.getName()); //Bean 转 map BeanUtils.describe(user1); //Map 转 Bean Map beanMap = new HashMap(); beanMap.put("name", "张三"); User user3 = new User(); BeanUtils.populate(user3, beanMap); System.out.println(user3.getName()); Guava
Google 开源的一个基于 Java 扩展项目,包含了一些基本工具、集合扩展、缓存、并发工具包、字符串处理等。
maven 依赖 1 2 3 4 5 com.google.guava guava 30.1.1-jre Map 类型
在java 代码中经常会遇到需要写 Map map 的局部变量的时候。有时候业务情况还会更复杂一点。 1 2 3 4 5 6 7 8 9 10 11 12 13//以前 Map> map = new HashMap>(); List list = new ArrayList(); list.add("张三"); list.add("李四"); map.put("名称", list); System.out.println(map.get("名称")); //现在 Multimap multimap = ArrayListMultimap.create(); multimap.put("名称", "张三"); multimap.put("名称", "李四"); System.out.println(multimap.get("名称")); value 不能重复的 Map
在 Map 中 value 的值时可以重复的,Guava 可以创建一个 value 不可重复的 Map,并且 Map 和 value 可以对调。 1 2 3 4 5 6 7 8 9//会报异常 BiMap biMap = HashBiMap.create(); biMap.put("key1", "value"); biMap.put("key2", "value"); System.out.println(biMap.get("key1")); //key-value 对调 biMap = biMap.inverse(); System.out.println(biMap.get("value")); 缓存
写业务的时候肯定会使用缓存,当不想用第三方作为缓存的时候,Map 又不够强大,就可以使用 Guava 的缓存。
使用 CacheBuilder.newBuilder().build() 构建缓存,maximumSize() 方法可以设置缓存的存储数量 1 2 3 4 5Cache cache = CacheBuilder.newBuilder().maximumSize(2).build(); cache.put("key1", "value1"); cache.put("key2", "value2"); cache.put("key3", "value3"); System.out.println(cache.getIfPresent("key1")); //key1 = null 过期时间
expireAfterAccess() 可以设置缓存的过期时间。 1 2 3 4Cache cache = CacheBuilder.newBuilder().maximumSize(2).expireAfterAccess(1, TimeUnit.SECONDS).build(); cache.put("key1", "value1"); Thread.sleep(1000); System.out.println(cache.getIfPresent("key1")); 加载数据
当需要访问 key1 时,如果 key1 此时没有被缓存,就会从回调函数中加载 key1 的值。值得一提的时当多个线程同时访问的时候只有一个线程会执行回调函数。 1 2 3 4 5 6 cache.get("key1", new Callable() { public String call() throws Exception { return "value1"; } }); System.out.println(cache.getIfPresent("key1"));
Guava 有许许多多的工具类,这里只列出了小小的部分,可以在官网例子中查看到各种用法。 Hutool
一个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 扩展模块,对第三方封装(模板引擎、邮件等) hutool-http 基于HttpUrlConnection的Http客户端封装 hutool-log 自动识别日志实现的日志门面 hutool-script 脚本执行封装,例如Javascript hutool-setting 功能更强大的Setting配置文件和Properties封装 hutool-system 系统参数调用封装(JVM信息等) hutool-json JSON实现 hutool-captcha 图片验证码实现 SecureUtil(加密解密工具)
主要是在登录的时候还有修改密码的时候用到的,因为数据库里面的密码是md5加密处理的,所以登录的时候需要先加密之后再到数据库进行查询,使用Hutool的话,只需要调用SecureUtil中的md5方法就可以了。 user = userService.userLoginByName(loginName,SecureUtil.md5(loginPwd));HtmlUtil(HTML工具类)
这个工具类就比较厉害了,不过我在Halo当中用得最多的还是HtmlUtil.encode,可以将一些字符转化为安全字符,防止xss注入和SQL注入,比如下面的评论提交。 comment.setCommentAuthor(HtmlUtil.encode(comment.getCommentAuthor()));
这就是防止有小坏蛋故意写一些可执行的js代码,然后提交评论,在后台面板就会执行这一段代码,比较危险,使用encode方法就可以将
就可以将
正式官宣了!被司马南公开质疑后,联想滴滴的结果到来了点击关注,每天精彩不断!导读正式官宣了!被司马南公开质疑后,联想滴滴的结果到来了!众所周知,随着国内科技产业的快速发展,在最近这几十年时间里,国内也诞生了一大批的互联网科技巨头企业
一个司马南为什么能挑战企业的巨无霸联想司马南,一个六十多岁的老头,普通而退休,无权又无势,一个普通的自媒体人,却能手撕联想,多期视频,有理有据,口若悬河,下面的网友一呼百应,影响巨大。为什么一介草民,能挑战企业的巨无霸
关于联想,国家出手调查,这一切都被司马南说中了?自从去年科创板上市未果后,联想就一直处于舆论的风口浪尖,尤其是司马南胡锡进等学者对联想提出的种种质疑,至今联想都没有给出回应,这也引来了网友的口诛笔伐。其实,对于联想来说,沉默是解
联想被责令整改,司马南只是说了实话今年年初,司马南在聊天中只不过说了几句他看到的新闻资料,然后引发了网络大战,因为联想的关系网太复杂,所以网上很多水军漫无目的的喷司马南,有很多都莫名其妙。终于,今天官方经过调查开始
王传福15岁失双亲,嫂子卖嫁妆供他上学,今身价千亿不忘兄嫂情对于比亚迪来说,2022或将是它的重生元年。因为从这一年的三月份开始,比亚迪开始停止燃油汽车的整装生产。这个消息直白一点来说,比亚迪将彻底告别燃油时代,再次回归到纯电车的轨道上来。
2022年全国老年人防诈反诈知识大赛启动中国青年报客户端北京5月13日电(中青报中青网记者王亦君)由中国老龄协会公安部刑侦局主办,中国老年杂志社腾讯公司承办,泰康之家协办的2022年全国老年人防诈反诈知识大赛(以下简称大
绑定特斯拉松下力推4680电池上车特斯拉在抢占全球新能源汽车市场份额时,也成为电池巨头眼中的利润蛋糕。5月12日,有消息称,松下公司首席财务官梅田博和透露特斯拉正要求松下控股公司加速开发4680电池,同时特斯拉对2
家里宽带从100M升级到200M,需要更换路由器吗?家庭带宽升级到200M,如果路由器的有线端口WAN端口和LAN端口仅支持百兆,是无法跑满签约带宽的,需要升级全千兆无线路由器。下文具体说一说。全千兆无线路由器有线端口支持千兆路由器
家里安装了电信带宽为300M的光纤,网速却慢如蜗牛,怎么解决?电信300M的家庭带宽,家庭网络需要使用千兆无线路由器千兆网线组网。如果感觉网速比较慢,很可能是自家网络出现了问题,可以用排除法查找原因。step1断开路由器测试网速家庭带宽测速,
常见vue面试题,大厂小厂都一样一谈谈你对MVVM的理解?映射关系简化,隐藏controllerMVVM在MVC的基础上,把控制层隐藏掉了。Vue不是一个MVVM框架,它是一个视图层框架。ViewModal是一个
我还是选择了全频喇叭首先今天我说的目的不是和大家争论全频喇叭好还是分频音箱好这个问题。我觉得这个不应该再争论了。分频音箱是科技和时代选择的结果,分频音箱从数据层面和技术层面远远超过了全频喇叭。这个是时