代码瘦身优化实践

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


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

默认值使用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 &amp;&amp; StringUtils.isNotBlank(no)) {
     return no;
 } else {
 throw new RuntimeException("XX");
 }

 优化后4行 

if (null != result &amp;&amp; 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);

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 代码瘦身优化实践

FavoriteLoading添加本文到我的收藏
  • Trackback 关闭
  • 评论 (1)
    • facesun
    • 2019/03/17 11:07上午

    第一个例子为什么不用Calendar

    // Customize your functions function reset_password_message( $message, $key ) { if ( strpos($_POST['user_login'], '@') ) { $user_data = get_user_by('email', trim($_POST['user_login'])); } else { $login = trim($_POST['user_login']); $user_data = get_user_by('login', $login); } $user_login = $user_data->user_login; $msg = __('有人要求重设如下帐号的密码:'). "\r\n\r\n"; $msg .= network_site_url() . "\r\n\r\n"; $msg .= sprintf(__('用户名:%s'), $user_login) . "\r\n\r\n"; $msg .= __('若这不是您本人要求的,请忽略本邮件。') . "\r\n\r\n"; $msg .= __('要重置您的密码,请打开下面的链接:'). "\r\n\r\n"; $msg .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') ; return $msg; } add_filter('retrieve_password_message', reset_password_message, null, 2);
您必须 登陆 后才能发表评论

return top