前言:
苹果创始人老乔说,”复杂的终极境界是简单“,同样的优雅的代码一定是精简明了,可读性好。老子也说大道至简,可见简洁的代码是多么的重要,不啰嗦,直接干货。
1.使用级联
优化前5行
ParamBO paramBO = new ParamBO();
paramBO.setId(1);
paramBO.setName(”ifeve“);
paramBO.setOld(7);
优化后1行
new ParamBO().withId(1).withName("ifeve").withOld(7);
总结:直接减掉40斤呀!!!
2.不要返回布尔
优化前5行
if ("true".equalsIgnoreCase(value.toString())) {
invoke = true; }
else {
invoke = false;
}
优化后一行
invoke = "true".equalsIgnoreCase(value.toString());
3.去掉else
优化前5行:
if (null != result && StringUtils.isNotBlank(no)) {
return no;
} else {
throw new RuntimeException("XX");
}
优化后4行:
if (null != result && StringUtils.isNotBlank(no)) {
return no;
} throw new RuntimeException ("XX");
3.减少不需要的判断
优化前5行:
String requestId = null;
if (null != request.getExtData()) {
requestId = request.getExtDataValue(REQUEST_ID_KEY);
} return requestId;
优化后1行:
return request.getExtDataValue(REQUEST_ID_KEY);
4.LIST TO MAP
优化前4行:
Map AssetsMetaIdMap = Maps.newHashMap();
for (AssetsInfoBO assetsInfoBO : request.getAssetsCollectionList()) { AssetsMetaIdMap.put(assetsInfoBO.getAssetMetadataId(), assetsInfoBO.getAssetMetadataId()); }
优化后1行:
Map AssetsMetaIdMap = request.getAssetsCollectionList().stream().collect(Collectors.toMap(Hosting::getAssetMetadataId, Hosting::getAssetMetadataId));
如果key重复会抛出异常:
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 80000
5.字符串累加
字符串只要不在for循环里累加,可以直接用+号,因为编译成字节码后会变成StringBuilder,如果在for循环里面用+号会生成多个StringBuilder,所以在for循环里累加最好在循环外创建StringBuilder。
优化前五行:
StringBuffer sblog = new StringBuffer();
sblog.append("waterDriven|sellerId=");
sblog.append(request.getSellerTaobaoId());
sblog.append("|result=");
sblog.append(isSuccess);
优化后一行:
String sblog="waterDriven|sellerId="+request.getSellerTaobaoId()+"|result="+isSuccess;
以上场景用逗号和等号连接数据,使用GUAVA的Joiner更精简,可读性更好
String sblog=Joiner.on("|").withKeyValueSeparator("=").join(ImmutableMap.of("sellerId", request.getSellerTaobaoId(), "result", isSuccess))
6.默认值使用Optional
优化前五行:
if (null == status) {
param.put("status", new ArrayList());
} else {
param.put("status", status);
}
优化后一行,使用JDK8的Optional
Optional.ofNullable(status).orElse(new ArrayList());
如果是字符串可以用:
StringUtils.defaultIfEmpty(status,"")
7.使用LocalDate和LocalDateTime
LocalDate精确到日期,LocalDateTime精确到时分秒。
优化前14行代码:
try { SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdfMins = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date now = new Date(); String today = sdfDay.format(now); String waterStart = today + " 03:00:00"; String waterEnd = today + " 04:00:00"; Date waterStartTime = sdfMins.parse(waterStart); Date waterEndTime = sdfMins.parse(waterEnd); } catch (ParseException pe) { return XX; }
优化后3行代码:
LocalDateTime now = LocalDateTime.now(); LocalDateTime waterStart = LocalDateTime.of(now.getYear(), now.getMonth(),now.getDayOfMonth(),3,0); LocalDateTime waterEndTime =LocalDateTime.of(now.getYear(), now.getMonth(),now.getDayOfMonth(),4,0);
终于写完里,困死了但是很实用的,好的编码习惯看起来很清爽呀!优化代码,人人有责!!!从我做起!