使用LocalDate和LocalDateTime

描述

 

 

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

使用LocalDate和LocalDateTime

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


	
  1. try {

  2.    SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd");

  3.    SimpleDateFormat sdfMins = new SimpleDateFormat("yyyy-MM-dd HHss");

  4.    Date now = new Date();

  5.    String today = sdfDay.format(now);

  6.    String waterStart = today + " 0300";

  7.    String waterEnd = today + " 0400";

  8.    Date waterStartTime = sdfMins.parse(waterStart);

  9.    Date waterEndTime = sdfMins.parse(waterEnd);

  10. } catch (ParseException pe) {

  11.    return XX;

  12. }

优化后3行代码


	
  1. LocalDateTime now = LocalDateTime.now();

  2. LocalDateTime waterStart = LocalDateTime.of(now.getYear(), now.getMonth(),now.getDayOfMonth(),3,0);

  3. LocalDateTime waterEndTime =LocalDateTime.of(now.getYear(), now.getMonth(),now.getDayOfMonth(),4,0);

默认值使用Optional

优化前五行


	
  1. if (null == status) {

  2.    param.put("status", new ArrayList<String>());

  3. } else {

  4.    param.put("status", status);

  5. }

优化后一行,使用JDK8的Optional


	
  1. Optional.ofNullable(status).orElse(new ArrayList<String>());

如果是字符串可以用


	
  1. StringUtils.defaultIfEmpty(status,"")

字符串累加

字符串只要不在for循环里累加,可以直接用+号,因为编译成字节码后会变成StringBuilder,如果在for循环里面用+号会生成多个StringBuilder,所以在for循环里累加最好在循环外创建StringBuilder。优化前五行


	
  1. StringBuffer sblog = new StringBuffer();

  2. sblog.append("waterDriven|sellerId=");

  3. sblog.append(request.getSellerTaobaoId());

  4. sblog.append("|result=");

  5. sblog.append(isSuccess);

优化后一行


	
  1. String sblog="waterDriven|sellerId="+request.getSellerTaobaoId()+"|result="+isSuccess;

以上场景用逗号和等号连接数据,使用GUAVA的Joiner更精简,可读性更好


	
  1. String sblog=Joiner.on("|").withKeyValueSeparator("=").join(ImmutableMap.of("sellerId", request.getSellerTaobaoId(), "result", isSuccess))

LIST TO MAP

优化前4行


	
  1. Map<String, String> AssetsMetaIdMap = Maps.newHashMap();

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

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

  4. }

优化后1行


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

如果key重复会抛出异常


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

减少不需要的判断

优化前5行


	
  1. String requestId = null;

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

  3.    requestId = request.getExtDataValue(REQUEST_ID_KEY);

  4. }

  5. return requestId;

优化后1行


	
  1. return request.getExtDataValue(REQUEST_ID_KEY);

去掉else

优化前5行


	
  1. if (null != result && StringUtils.isNotBlank(no)) {

  2.     return no;

  3. } else {

  4.     throw new RuntimeException("XX");

  5. }

优化后4行


	
  1. if (null != result && StringUtils.isNotBlank(no)) {

  2.     return no;

  3. }

  4. throw new RuntimeException("XX");

不要返回布尔

优化前5行


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

  2.    invoke = true;

  3. } else {

  4.    invoke = false;

  5. }

优化后一行


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

使用级联

优化前5行


	
  1. ParamBO paramBO = new ParamBO();

  2. paramBO.setId(1);

  3. paramBO.setName(”ifeve“);

  4. paramBO.setOld(7);

优化后1行


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

-End-

 

审核编辑 :李倩

 


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分