java编程小技巧(java 8)

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 map = new IdentityHashMap()<>;
map.put("a", "aaa");
map.put("a", "bbb"); // 会覆盖上一个key
map.put(new String("a"), "bbb"); //不会覆盖














你可能感兴趣的:(java编程小技巧(java 8))