平常开发的优化代码:

打印 上一主题 下一主题

主题 903|帖子 903|积分 2709

第一: 检验,报错直接抛出非常: Objects.requireNonNull(contactId);
第二:方法名,检查是否需要输出日志: if(printLogIfNeeded)   //对于sql查询方法、java中的方法名字的定名定义推荐: find..By/query..By/get..By
  1. // 检验查询结果是否 业务需要返回的code
  2. CustomerBuPO customerBu = Optional.ofNullable(foundationRepository.getBuByName(reqVO.getBuId()))
  3.            .orElseThrow(() -> new BusinessException(101, "buId not exist"));
复制代码
第三:三个字段都不为null的情况下执行的代码;
  1. if (List.of("a", "a", "a").stream().<strong>allMatch</strong>(Objects::nonNull)) {
  2.     System.out.println("3个对象都不为空");
  3. }
复制代码
第四:其中有2个条件任一匹配到:
  1.    if(Stream.of(InProgress, Queued).<strong>anyMatch</strong>(status -> Objects.equals(source.getStatusCd(), status))){ }
  2. 或者:if(Arrays.asList(dailyLimit, monthLimit).contains(type)){}
  3. 或者:StringUtils.<strong>equalsAny</strong>(a,b,c)  //只要有一个不为空
复制代码
第五:假如为null值,但是要转换字段类型取值,都可以用这种方法:
  1. CustomerLoyTxnStg loyTxnStg = new CustomerLoyTxnStg();
  2. loyTxnStg.setOrigPoints(Optional.ofNullable(source.getOrigPoints()).map(BigDecimal::valueOf).orElse(null));<br>或者:<br>memTier.setSeqNum(Objects.<strong>requireNonNullElse</strong>(tier, Tier::new).getSeqNum());<br>或者:<br>String birthDay = StringUtils.<strong>defaultIfEmpty</strong>(contact.getCustomBirthdayDay(), "1");<br>或者:
复制代码
1. 判断为null给默认值:
String pointValue = posReqVO.getAccount1000Value() == null? "0":posReqVO.getAccount1000Value();
        String pointValue = Optional.ofNullable(posReqVO.getAccount1000Value()).orElse("0");
第六:这是一种常见的 JSON 解析操纵,它会尝试获取指定字段的值,假如该字段不存在或为 null,则返回空字符串 ""。
  1. String segmentNo = json.optString("SegmentNo")
  2. String partnerFlag = customerJson.opt("PartnerFlag");
  3. JSONObject jsonObject = customer.optJSONObject("Segments");
复制代码
第七:jdk9及其以上:ifPresentOrElse() 的新方法。没有用jdk9,但是jdk8这样也能实现:
  1. Optional.ofNullable(memberSegment)
  2.             .map(existingSegment -> {
  3.                 CustomerLoyMemberSegmentPO updateSegmentPO = initMemberSegmentPO(memberCard, partnerCardDefnPO)
  4.                     .setEndDate(null).setLastUpdated(DateUtils.utcNow());
  5.                 memberSegmentRepository.updateSegmentByIdAndSegNum(updateSegmentPO);
  6.                 return existingSegment;
  7.             })
  8.             .orElseGet(() -> {
  9.                 memberSegmentRepository.insert(memberSegmentPO);
  10.                 return null;
  11.             });<br>
复制代码
第八:优化 if else,不想用if else,也可以考虑用函数式断言Predicate或BiPredicate 校验。
  1. 1:用三元运算和 Consumer 改造:
复制代码
  1. <em id="__mceDel">Consumer<List<CustomerLoyOrderTxnPO>> insertOperation = posConfirmPointVO.getIsRepeatedOrderFlag() ?
  2.                         orderTxnRepository::signleInsertLoyCustomerTxnOrder :
  3.                         orderTxnRepository::batchInsertLoyCustomerTxnOrder;
  4.                 insertOperation.accept(orderTxnsList);<br>
  5. 2:使用三元运算符,最简单实现。<br>
  6. 3:用Predicate检验改造:
  7.         // 判断是否重复订单的条件
  8.         Predicate<PosConfirmPointVO> isRepeatedOrder = PosConfirmPointVO::getIsRepeatedOrderFlag;
  9.         // 定义处理重复订单的逻辑
  10.         Runnable handleRepeatedOrder = () -> checkInsertCustomerBueventTxn(bueventTxnPO, account, buEventAccountDefnXmPOS);<br>
  11.         // 定义处理非重复订单的逻辑
  12.         Runnable handleNonRepeatedOrder = () -> {
  13.             customerBueventTxnRepository.insertCustomerBueventTxn(bueventTxnPO);
  14.             upsertBueventAccountByType(memberId, eventId, account, buEventAccountDefnXmPOS);
  15.         };
  16.         // 根据订单是否重复执行不同的逻辑
  17.         if (isRepeatedOrder.test(posConfirmPointVO)) {
  18.             handleRepeatedOrder.run();
  19.         } else {
  20.             handleNonRepeatedOrder.run();
  21.         }</em>
复制代码
第九:用jdk8 优化旧代码:
  1. 1. 旧代码:
  2.     String authToken = getAuthToken();
  3.     updateApolloConfig(count, authToken, apolloServiceConfig.parseItemUrl());
  4.     if (isUpdateBlue) {
  5.         updateApolloConfig(count, authToken, apolloServiceConfig.parseBlueItemUrl());
  6.     }
  7. 这样不更好:   
  8.     Stream.of(apolloServiceConfig.parseItemUrl(),
  9.                 isUpdateBlue ? apolloServiceConfig.parseBlueItemUrl() : Stream.empty())
  10.         .forEach(url -> updateApolloConfig(count, getAuthToken(), url));
  11.         
  12. 2. 旧代码:
  13.     List<Account> accounts = posConfirmReqVO.getAccounts();
  14.     if (accounts.isEmpty()) {
  15.         return;
  16.     }
  17.     accounts.stream()
  18.         .filter(acc -> "1000".equals(acc.getId()))
  19.         .findFirst()
  20.         .ifPresent(x -> posConfirmReqVO.setAccount1000Value(x.getEarnValue()));
  21.         
  22. 这样更好:   
  23.      Optional.ofNullable(posConfirmReqVO.getAccounts())
  24.             .filter(accounts -> !accounts.isEmpty())
  25.             .flatMap(accounts -> accounts.stream()
  26.                 .filter(acc -> "1000".equals(acc.getId()))
  27.                 .findFirst())
  28.             .ifPresent(x -> posConfirmReqVO.setAccount1000Value(x.getEarnValue()));
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

滴水恩情

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表