首页 > 其他分享 >平时开发的优化代码:

平时开发的优化代码:

时间:2024-05-09 15:15:47浏览次数:29  
标签:ofNullable posConfirmReqVO String Optional 代码 平时 accounts null 优化

第一: 检验,报错直接抛出异常: Objects.requireNonNull(contactId);

第二:方法名,检查是否需要输出日志: if(printLogIfNeeded)   //对于sql查询方法、java中的方法名字的命名定义推荐: find..By/query..By/get..By

// 检验查询结果是否 业务需要返回的code
CustomerBuPO customerBu = Optional.ofNullable(foundationRepository.getBuByName(reqVO.getBuId()))
           .orElseThrow(() -> new BusinessException(101, "buId not exist"));

第三:三个字段都不为null的情况下执行的代码;

if (List.of("a", "a", "a").stream().allMatch(Objects::nonNull)) {
    System.out.println("3个对象都不为空");
}

第四:其中有2个条件任一匹配到:

   if(Stream.of(InProgress, Queued).anyMatch(status -> Objects.equals(source.getStatusCd(), status))){ }

或者:if(Arrays.asList(dailyLimit, monthLimit).contains(type)){}

或者:StringUtils.equalsAny(a,b,c)  //只要有一个不为空

第五:如果为null值,但是要转换字段类型取值,都可以用这种方法:

CustomerLoyTxnStg loyTxnStg = new CustomerLoyTxnStg();
loyTxnStg.setOrigPoints(Optional.ofNullable(source.getOrigPoints()).map(BigDecimal::valueOf).orElse(null));
或者:
memTier.setSeqNum(Objects.requireNonNullElse(tier, Tier::new).getSeqNum());
或者:
String birthDay = StringUtils.defaultIfEmpty(contact.getCustomBirthdayDay(), "1");
或者:

1. 判断为null给默认值:

String pointValue = posReqVO.getAccount1000Value() == null? "0":posReqVO.getAccount1000Value();
String pointValue = Optional.ofNullable(posReqVO.getAccount1000Value()).orElse("0");

第六:这是一种常见的 JSON 解析操作,它会尝试获取指定字段的值,如果该字段不存在或为 null,则返回空字符串 ""。

String segmentNo = json.optString("SegmentNo")
String partnerFlag = customerJson.opt("PartnerFlag");
JSONObject jsonObject = customer.optJSONObject("Segments");

第七:jdk9及其以上:ifPresentOrElse() 的新方法。没有用jdk9,但是jdk8这样也能实现:

Optional.ofNullable(memberSegment)
            .map(existingSegment -> {
                CustomerLoyMemberSegmentPO updateSegmentPO = initMemberSegmentPO(memberCard, partnerCardDefnPO)
                    .setEndDate(null).setLastUpdated(DateUtils.utcNow());
                memberSegmentRepository.updateSegmentByIdAndSegNum(updateSegmentPO);
                return existingSegment;
            })
            .orElseGet(() -> {
                memberSegmentRepository.insert(memberSegmentPO);
                return null;
            });

第八:优化 if else,不想用if else,也可以考虑用函数式断言Predicate或BiPredicate 校验。

1:用三元运算和 Consumer 改造:
Consumer<List<CustomerLoyOrderTxnPO>> insertOperation = posConfirmPointVO.getIsRepeatedOrderFlag() ?
                        orderTxnRepository::signleInsertLoyCustomerTxnOrder :
                        orderTxnRepository::batchInsertLoyCustomerTxnOrder;
                insertOperation.accept(orderTxnsList);
2:使用三元运算符,最简单实现。
3:用Predicate检验改造: // 判断是否重复订单的条件 Predicate<PosConfirmPointVO> isRepeatedOrder = PosConfirmPointVO::getIsRepeatedOrderFlag; // 定义处理重复订单的逻辑 Runnable handleRepeatedOrder = () -> checkInsertCustomerBueventTxn(bueventTxnPO, account, buEventAccountDefnXmPOS);
// 定义处理非重复订单的逻辑 Runnable handleNonRepeatedOrder = () -> { customerBueventTxnRepository.insertCustomerBueventTxn(bueventTxnPO); upsertBueventAccountByType(memberId, eventId, account, buEventAccountDefnXmPOS); }; // 根据订单是否重复执行不同的逻辑 if (isRepeatedOrder.test(posConfirmPointVO)) { handleRepeatedOrder.run(); } else { handleNonRepeatedOrder.run(); }

第九:用jdk8 优化旧代码:

1. 旧代码:
    String authToken = getAuthToken();
    updateApolloConfig(count, authToken, apolloServiceConfig.parseItemUrl());

    if (isUpdateBlue) {
        updateApolloConfig(count, authToken, apolloServiceConfig.parseBlueItemUrl());
    }
 这样不更好:    
    Stream.of(apolloServiceConfig.parseItemUrl(),
                isUpdateBlue ? apolloServiceConfig.parseBlueItemUrl() : Stream.empty())
        .forEach(url -> updateApolloConfig(count, getAuthToken(), url)); 
        
2. 旧代码:
    List<Account> accounts = posConfirmReqVO.getAccounts();
    if (accounts.isEmpty()) {
        return;
    }
    accounts.stream()
        .filter(acc -> "1000".equals(acc.getId()))
        .findFirst()
        .ifPresent(x -> posConfirmReqVO.setAccount1000Value(x.getEarnValue()));
        
 这样更好:    
     Optional.ofNullable(posConfirmReqVO.getAccounts())
            .filter(accounts -> !accounts.isEmpty())
            .flatMap(accounts -> accounts.stream()
                .filter(acc -> "1000".equals(acc.getId()))
                .findFirst())
            .ifPresent(x -> posConfirmReqVO.setAccount1000Value(x.getEarnValue()));

标签:ofNullable,posConfirmReqVO,String,Optional,代码,平时,accounts,null,优化
From: https://www.cnblogs.com/lgg20/p/18182069

相关文章

  • jenkins 拉取代码之后 自动执行jar包到部署服务器自动运行
                原文地址:  https://blog.csdn.net/xiuyuandashen/article/details/124490378......
  • 优化cmd中,查询表字段过长情况下的展示效果
    当我们遇到table字段比较多,cmd无法在一行内展示所有字段的情况时可以切换查询语句的结束格式:由以分号;结尾select*fromtable;切换为以/G结尾select*fromtable/G可以切换table的展示格式为以竖列的形式展示一行一行的数据......
  • 09. C语言内嵌汇编代码
    C语言函数内可以自定义一段汇编代码,在GCC编译器中使用asm或__asm__关键词定义一段汇编代码,并可选添加volatile关键字,表示不要让编译器优化这段汇编代码。内嵌汇编代码格式如下:__asm__(  "汇编代码"  :输出描述  :输入描述  :修改描述);汇编代码部分......
  • 如何写出整洁的代码
    原文cnblogs.com/liuboren/p/17017421.html0.前言本篇文章是<<代码整洁之道>>的学习总结,通过这篇文章你将了解到整洁的代码对项目、公司和你的重要性,以及如何书写整洁的代码.通过命名、类、函数、测试这四个章节,使我们的代码变得整洁.1.为什么要保持代码整洁?不整洁的代......
  • Zblog Nginx 下二级目录设置伪静态代码
    最近有一个好朋友找我咨询zblog二级目录伪静态的问题,起因是这样的,他之前有zblog搭建了一个站点,然后,现在又想在站点根目录下再搭建一个问答站点,目录名称是这样qa,路径是/xxx/qa/,二级目录搭建完站后,发现URL无法伪静态,针对这个问题需要注意的是:在Nginx服务器配置中,我们需要编写特定的l......
  • 通过 pip 安装自己的代码包
    以前通过pip安装的时候总是很羡慕,别人的代码使用起来好方便啊,那时候觉得代码要提交到pip平台去管理肯定需要审核吧?后来了解到自己的代码要可以pip安装不需要审核,只需要遵循几个步骤就能轻松实现:准备代码包通过setuptools打包通过twine上传(需要pypi账号密码)重......
  • PVE安装后优化
    上传脚本文件至pve服务器,解压文件tarxvfpve_source.tar.gz解压出来有四个可执行脚本文件,脚本运行需要联网,保证外网通畅,执行./pve_source 1、去除订阅弹窗,输入6回车 2、web界面概要显示更多信息,输入7进入“修改PVE概要信息”,然后输入o使用推荐方案执行 ......
  • react 性能优化
    一纯组件1使用shouldComponentUpdate对先前的状态和props数据与下一个props或状态相同,如果两次的结果一直,那么就returnfalse使用纯净组件,pureComponentPureComponents负责shouldComponentUpdate——它对状态和props数据进行浅层比较(shallowcomparison),如果先前......
  • 关系代数与逻辑优化规则 (一): 定义
    作者:zhuwenzhuang,2024.05.08.阅读前假设读者熟悉数据库使用,了解SQL的语法和关系算子的大概含义,能通过EXPLAIN命令查看数据库执行计划.0前言数据库优化器的查询优化(QueryOptimization)指在查询等价的前提下,将代价更高的查询转化为代价更低的查询的过程.查询......
  • 代码随想录算法训练营第第一天 | 704. 二分查找 、27. 移除元素
    704、二分查找题目链接:https://leetcode.cn/problems/binary-search/文章讲解:https://programmercarl.com/0704.二分查找.html视频讲解:https://www.bilibili.com/video/BV1fA4y1o715`varsearch=function(nums,target){letleft=0;letright=nums.length;letmi......