zl程序教程

您现在的位置是:首页 >  其他

当前栏目

代码瘦身优化实践

代码 优化 实践 瘦身
2023-06-13 09:16:03 时间

史蒂夫.乔布斯说,”复杂的终极境界是简单“,同样的优雅的代码一定是精简明了,可读性好。

使用LocalDate和LocalDateTime

 LocalDate精确到日期,LocalDateTime精确到时分秒。 优化前14行代码 


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);

默认值使用Optional

优化前五行


if (null == status) {

 param.put( status , new ArrayList String 

 } else {

 param.put( status , status);

优化后一行,使用JDK8的Optional


Optional.ofNullable(status).orElse(new ArrayList String 

如果是字符串可以用


StringUtils.defaultIfEmpty(status, )

字符串累加

 字符串只要不在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))

LIST TO MAP

 优化前4行 


Map String, String AssetsMetaIdMap = Maps.newHashMap();

 for (AssetsInfoBO assetsInfoBO : request.getAssetsCollectionList()) {

 AssetsMetaIdMap.put(assetsInfoBO.getAssetMetadataId(), assetsInfoBO.getAssetMetadataId());

 优化后1行 


Map String, String AssetsMetaIdMap = request.getAssetsCollectionList().stream().collect(Collectors.toMap(Hosting::getAssetMetadataId, Hosting::getAssetMetadataId));

 如果key重复会抛出异常


Exception in thread main java.lang.IllegalStateException: Duplicate key 80000

减少不需要的判断

 优化前5行 


String requestId = null;

if (null != request.getExtData()) {

 requestId = request.getExtDataValue(REQUEST_ID_KEY);

return requestId;

优化后1行


return request.getExtDataValue(REQUEST_ID_KEY);

去掉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 

不要返回布尔

 优化前5行 


if ( true .equalsIgnoreCase(value.toString())) {

 invoke = true;

 } else {

 invoke = false;

 优化后一行 


invoke = true .equalsIgnoreCase(value.toString());

使用级联

优化前5行 


ParamBO paramBO = new ParamBO();

paramBO.setId(1);

paramBO.setName(”ifeve“);

paramBO.setOld(7);

优化后1行


new ParamBO().withId(1).withName( ifeve ).withOld(7);


原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/60459.html

jd