最近真的是忙的飞起啊!!年前还得更新一个版本,啊难受啊…趁今日有空,上来冒个泡

好,入正题,今日介绍几个非常实用的东西类,能够削减咱们重复造轮子,专心于详细的事务编写,提高生产功率,假如你还没有运用过这些东西类,强烈推荐去运用一下,你会发现代码清新许多

1.apache-commons-lang3

信任咱们在写代码的时候都会遇到,需要对字符串进行各种操作,例如判别是否为空,判别字符串是否全大/小写,是否包含某个字符串,是否以某个前缀开始/后缀结束,等等等等

因为String字符串供给的操作是有限的,不妨运用一下这个东西类感受一下

<!-- 引进依靠 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
</dependency>

1.1 判别字符串是否为空

import org.apache.commons.lang3.StringUtils;
/**
* 判别字符串是否为空,【common--lang3】
* @param str	传入字符串
* @return		是否为空boolean值
*/
private static boolean commonlang3IsEmpty(String str) {
    return StringUtils.isEmpty(str);
}
//源码其实便是
return cs == null || cs.length() == 0;

1.2 判别字符串是否为空(空字符也算空)

import org.apache.commons.lang3.StringUtils;
//isBlank跟isEmpty的差异就在于,假如字符串是由一串空格组成的,isEmpty会回来false,isBlank会回来true
private static boolean commonlang3IsBlank(String str) {
	return StringUtils.isBlank(str);
}
//源码注释写的很清楚,这个办法会比isEmpty愈加的谨慎

1.3 同时判别多个字符串是否都为Empty,或许Blank

StringUtils.isAllEmpty(CharSequence... css);
StringUtils.isAllBlank(CharSequence... css);

1.4 判别字符串是否全大/小写

private static boolean isAllUpperCase(String str) {
    //判别小写,把Upper换成lower即可
	return StringUtils.isAllUpperCase(str);
}
//这个就很常用了,String中是没有这个办法的,就得运用Character.isUpperCase来一个一个字符的判别,属于重复造轮子

1.5 判别指定字符串是否以某个前缀最初(能够疏忽大小写)

private static boolean isStartWithPrefix(String str, String prefix) {
    //疏忽大小写 StringUtils.startsWithIgnoreCase(str, prefix);
    return StringUtils.startsWith(str, prefix);
}
//类似的,后缀suffix也是差不多的api StringUtils.endWith(String str,String suffix)

当然,commons中其实还有许多很有用的东西类,不只仅只针对字符串方面的,我是运用StringUtils比较多,所以就拿它作为解说,commons详细还有那些个方面的东西类,就由待你自己去开掘啦,比方时间格式化东西类、线程东西类、并发东西类等等

2.apache-commons-collections4

从包名应该就猜得出来,这是对调集进行操作的东西类,挑几个常用的办法来介绍一下

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.0</version>
</dependency>

2.1 判别调集是否为空

private static boolean isCollectionEmpty(Collection collection) {
    return CollectionUtils.isEmpty(collection);
}
//注意接收的是Collection接口,所以所有实现了Collection的类都能够传入判别

2.2 回来两个调集的交/并集

这个是很常用的,某些场景咱们需要对两个调集中的值进行操作,回来一个新的调集

//union -> 并集
private static Collection<Integer> getUnion(Collection<Integer> cola,Collection<Integer> colb) {
    return CollectionUtils.union(cola, colb);
}
//构造两个list
List<Integer> listA = Arrays.asList(1 ,2 ,3 ,4 ,5);
List<Integer> listB = Arrays.asList(4,5,6,7);
//调用办法后的成果是
[1, 2, 3, 4, 5, 6, 7]
//intersection -> 交集
private static Collection<Integer> getIntersection(Collection<Integer> cola,Collection<Integer> colb) {
    return CollectionUtils.intersection(cola, colb);
}
//相同还是上述两个list,操作之后
[4, 5]

2.3 过滤调集中不符合条件的元素

//第一个参数接收一个调集
//第二个参数是一个谓词判别条件,假如不为真就从调集中移除,这儿便是想回来一个偶数列表
private static boolean filter(Collection<Integer> collection) {
    return CollectionUtils.filter(collection,
                                  object -> object % 2 != 1);
}
//list 【0,1 ,2 ,3 ,4 ,5,6,7,8,9,10】
//调用办法后回来
[0, 2, 4, 6, 8, 10]

2.4 针对Map的MapUtils

2.4.1 判别Map是否为空

private static boolean isMapEmpty(Map<?,?> map) {
   return MapUtils.isEmpty(map);
}

2.4.2 将Map的Value转换成对应的类型值

这儿以getLongValue来做一个介绍

//能够注意到此时Map的key是String类型的,value也是String类型的,咱们要把value转换成Long并且回来
private static Long getLongValue(Map<String,String> map) {
    return MapUtils.getLongValue(map, "key1");
}
Map<String,String> map = new HashMap<>();
map.put("key1", "12345");
Long longValue = getLongValue(map);
System.out.println(longValue);
//成果是longValue = 12345L
//假如传入String不是能转成Long类型的字符串,就会回来0,也能够经过重载办法,指定一个default值

MapUtils东西类供给了许多重载的方式,合适不同的场景运用

一些常用的工具类说明

2.4.3 将数组中的元素放到Map中

private static Map<?,?>	putAll(Map<?,?> map, Object[] array) {
    return MapUtils.putAll(map, array);
}
//假如传入的是一个二维数组
String[][] twoDimensionalArray = new String[][] {
    {"key1","value1"},
    {"key2","value2"},
    {"key3","value3"},
};
Map<?, ?> map = putAll(new HashMap<>() ,twoDimensionalArray);
System.out.println(map);
成果:{key1=value1, key2=value2, key3=value3}
//假如传入的是一个一维数组
String[] array = new String[] {
    "key1","value1","key2","value2","key3","value3"
};
Map<?, ?> map = putAll(new HashMap<>() ,array);
System.out.println(map);
成果:{key1=value1, key2=value2, key3=value3}, 假如传入的数组是有问题的,就会把对应的key-value扔掉
    也便是说,假如数组没有给出 "value3"这个元素,对应的key3就不会被添加到Map//假如传入的是Map.Entry
Map.Entry[] entries = new Map.Entry[] {
    new DefaultMapEntry("key1","value1"),
    new DefaultMapEntry("key2","value2"),
    new DefaultMapEntry("key3","value3")
};
Map<?, ?> map = putAll(new HashMap<>() ,entries);
System.out.println(map);
成果:{key1=value1, key2=value2, key3=value3}

collection4这个包就介绍这么多,咱们也能够去看下这个包还供给那些东西类,例如针对Set的、Queue的等等都有

3.Hutool东西类包

官网:点击翻开

官方介绍:

Hutool是一个小而全的Java东西类库,经过静态办法封装,下降相关API的学习本钱,提高工作功率,使Java拥有函数式言语般的优雅,让Java言语也能够“甜甜的”。

Hutool中的东西办法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中处理小问题的利器,也是小型项目中的功率担当;

简而言之,里边包含了咱们日常开发中的会应用到东西类的各个场景,例如

  • 时间的转换东西
  • 生成大局仅有id
  • 文件流的操作
  • 日志操作
  • …..

详细的运用例子,直接看官方文档即可

总结

其实还是有许多其他很有用的东西类的,例如Google guava,上面没列出来的原因是(主要是懒了,有爱好的去查查资料即可),找到合适运用的,足够安稳的,功能又能够的,就能够了,commons-collection4和guava都供给了对调集的简易操作,根据喜爱选其一就好

还得看事务场景的需要啊,有得用就用(安稳性得考虑好),没必要自己重复造轮子,造一大堆轮子,功率还可能没他人的好,既糟蹋时间也糟蹋精力,当然你说我就想自己造一个,那当然能够,这儿也只是提出一个建议而已