CollectionUtils.isEmpty()
使用apache或者spring下的该工具类,可以简洁的判断collection是否是null还是空:
if (CollectionUtils.isEmpty(list))
而不是使用
if (list != null && list.size() > 0)
List list = Arrays.asList("a","b");
该方式一般用于数组转List,但如果需要对List进行add操作则不能使用,因为该方式返回的是Arrays的内部类java.util.Arrays.ArrayListt
而不是 java.util.ArrayList
,不支持add/remove, 会抛出异常:
Exception in thread "main" java.lang.UnsupportedOperationException
StringBuilder
对于一个字符串如果需要多次赋值,建议使用 StringBuilder
可以节省部分资源和提高性能,例如下面的代码反复对 allNames
重新赋值,jvm会对每次赋值的结果创建一个新的String对象,造成资源的浪费:
String allNames = "";
for (String name : nameList) {
allNames += name + ";";
}
而对于下面这种只赋值一次的情况,使用 +
和 StringBuilder
是等价的,因为该方式在编译期就已经被转换为一个String对象,如果觉得该方式不够优雅,可以使用String.format("%s %s %s", "I", "like", "java")
代替:
String str = "a" + "b" + "c";
catch (IOException | NumberFormatException e)
对于不同的exception有同样的处理方式,可以使用该方法保持代码的整洁:
try {
...
} catch (IOException | NumberFormatException e) {
log.error("Operation failed cause of exception:", e);
}
Boolean.TRUE.equals(obj)
使用该方式判断装箱对象,可以防止抛出 NullPointException
:
Boolean b = null;
if (b) { // this will throw NullPointException
...
}
StandardCharsets.UTF_8
使用该方式指定 char set 而不是用hard code "UTF-8"
String str = new String(bytes, StandardCharsets.UTF_8);
@Scheduled(zone="")
在配置zone的参数时只能使用GMT+/-的格式,或者使用ZoneID例如America/New_York,可参考java文档中的TimeZone: https://docs.oracle.com/javase/8/docs/api/index.html
@Scheduled(cron="", zone="America/New_York") // can not use +/-
@Scheduled(cron="", zone="GMT+0:00")
@Scheduled(cron="", zone="GMT-4:00")
如果直接使用 zone="EST+0:00"
或者 zone="CST+0:00"
启动会报错:
Invalid time zone specification "EST+0:00"
IdentityHashMap
可以保存多个相同的key,但是要求key的对象地址不一样
Map<String, String> map = new IdentityHashMap()<>;
map.put("a", "aaa");
map.put("a", "bbb"); // 会覆盖上一个key
map.put(new String("a"), "bbb"); //不会覆盖